我有桌子" 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事件。
我该如何调试此事件。
答案 0 :(得分:3)
假设您的列是A,B,C等。您可以使用索引/匹配公式作为数组(使用 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
部分是你在[{1}}范围内寻找W1
,然后是A2:A10
中的任何内容,你会搜索X1
等
答案 1 :(得分:2)
我的回答似乎有点晚了,@ BruceWayne打败了我。不过,我会添加我的解决方案,并且有一个很好的小插图:
基本上,它已经提出了相同的提案。只需使用数组公式和&
符号将所有条件合并为一个。最后,标准看起来像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
编辑:鉴于您对其他答案的评论,我已调整代码以找到值,因为我相信您正在寻找