Получить цену из таблицы в Excel с помощью поиска или макроса

У меня есть таблица «PriceList» в excel с ниже структуры

Type Thickness width Height Price iron 5 7 10 20 iron 10 10 15 24 iron 12 14 17 26 

как я могу найти цену, если кто-то входит в тип железа, толщина 10, ширина 9, высота 14, используя vlookup или макрос. Я попытался использовать vlookup, но его не работает, а позже я нашел в Google, что Vlookup извлекает данные только с одним параметром. Могу ли я сделать это с помощью макроса, как мы делаем для выбора данных листа, используя запросы

 select * from [sheet1$] where col1=x 

Пожалуйста, предложите?

Изменить: я вычислил выше, используя это . Теперь я вызываю этот макрос на событие изменения листа, как показано ниже.

  Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 41 Or Target.Column = 43 Or Target.Column = 45 Or Target.Column = 46 Then Dim i As Currency i = Calculate_CorePrice(cell(Target.Row, 46).Value, cell(Target.Row, 45).Value, cell(Target.Row, 41).Value, cell(Target.Row, 43).Value, "RWJ Doorset Schedule", "ED15") cell(Target.Row, 134).Value = i End If End Sub 

если я сам отлаживаю функцию с жестко закодированными значениями, она работает, но если я вызываю функцию так, как описано выше, она не возвращает значение, и я не могу отлаживать событие sheet_change.

Как я могу отладить это событие.

Предполагая, что ваши столбцы: A, B, C и т. Д. Вы можете использовать формулу Index / Match в виде массива (введите с помощью CTRL + SHIFT + ENTER ).

Если пользователь вводит тип, толщину, ширину и высоту в W1 , X1 , Y1 и Z1 , вы можете использовать:

=Index($E$2:$E$10,Match(W1&X1&Y1&Z1,$A$2:$A$10&$B$2:$B$10&$C$2:$C$10&$D$2:$D$10,0))

Это запутанно, но в основном часть Match – вы ищете W1 в диапазоне A2:A10 , тогда все, что есть в X1 , вы будете искать B2:B10 и т. Д.

Кажется, я немного опоздал с моим ответом, и @BruceWayne избил меня. Тем не менее, я добавлю свое решение, а также найду красивую иллюстрацию:

введите описание изображения здесь

В принципе, это предложение уже было предложено. Просто используйте формулу массива и знак & чтобы объединить все критерии в один. В итоге критерии будут выглядеть так, как это, например, iron101015 . И это будет сравниваться со всеми комбинациями в таблице.

Лучше всего было бы перебрать данные, используя оператор if для проверки таблиц данных. (Это может быть помещено в суб или в функцию в зависимости от того, как вы хотите получить данные)

 Function GetPrice(Type As String, Thickness As Integer, Width As Integer, Height As Integer) Dim ItemRow As Range, SearchColumn As Range 'Dim Price As Double 'Use variable if this were a sub Set SearchColumn = Range(Cells(2,1),Cells(ActiveSheet.UsedRange.rows.count,1)) For Each ItemRow In SearchColumn If ItemRow.Value = Type AND ItemRow.Offset(0,1).Value >= Thickness AND ItemRow.Offset(0,2).Value >= Width AND ItemRow.Offset(0,3).Value >= Height AND ItemRow.Offset(-1,1).Value < Thickness AND ItemRow.Offset(-1,2).Value < Width AND ItemRow.Offset(-1,3).Value < Height Then 'Price = ItemRow.Offset(0,4).Value GetPrice = ItemRow.Offset(0,4).Value Exit For End If Next ItemRow End Function 

Изменить: учитывая ваш комментарий к другому ответу, я скорректировал код, чтобы найти значение, так как считаю, что вы ищете

Interesting Posts
Давайте будем гением компьютера.