使用查找或宏从Excel中的表中获取价格

时间:2016-06-16 13:57:51

标签: excel vba excel-vba

我有桌子" PriceList"在excel中具有以下结构

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

如果有人使用vlookup或macro进入铁型,厚度10,宽度9,高度14,我怎么能找到价格?我尝试过使用vlookup,但它不起作用,后来在谷歌上发现Vlookup只用一个参数检索数据。我是否可以使用宏来执行此操作,就像我们使用查询选择工作表数据一样

select * from [sheet1$] where col1=x

请建议??

编辑:我使用this计算了上述内容。现在我在下面的工作表更改事件中调用此宏

    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事件。

我该如何调试此事件。

3 个答案:

答案 0 :(得分:3)

假设您的列是A,B,C等。您可以使用索引/匹配公式作为数组(使用 CTRL + SHIFT + ENTER 输入)。

如果用户在W1X1Y1Z1中输入了类型,厚度,宽度和高度,您可以使用:

=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部分是你在[{1}}范围内寻找W1,然后是A2:A10中的任何内容,你会搜索X1

答案 1 :(得分:2)

我的回答似乎有点晚了,@ BruceWayne打败了我。不过,我会添加我的解决方案,并且有一个很好的小插图:

enter image description here

基本上,它已经提出了相同的提案。只需使用数组公式和&符号将所有条件合并为一个。最后,标准看起来像iron101015(例如)。它将与表中的所有组合进行比较。

答案 2 :(得分:1)

最好是循环访问数据,使用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

编辑:鉴于您对其他答案的评论,我已调整代码以找到值,因为我相信您正在寻找