INDEX MATCH VBA(根据两个条件返回一个值)

我正在为客户做一些工作,在那里他们收到客户和地区的每周报告(两列,工作表中的客户和地区B)。 * 为了清楚起见,我省略了电子表格中的其他列

他们需要将此电子表格中的价格与参考电子表格相匹配,我们将其称为价格。 每个客户和地区组合产生一定的价格,存储在上述参考电子表格中(在此参考工作表[价格]中,列A是客户,列B是地区,列C是A地区客户的价格) 。

我想要做的是:

基于A1(客户)和B1(地区),C1应该是(参考工作表上的价格查找值)。

传统的vlookupfunction将不起作用,因为需要满足多个标准(即,对于不同地区的同一客户,我们可能有不同的价格)。

我已经尝试了下面没有成功

Dim ULastRow As Long ActiveWorkbook.Worksheets(ActiveSheet.Name).UsedRange ULastRow = sht.UsedRange.Rows(sht.UsedRange.Rows.Count).Row Range("C2").FormulaR1C1 = _ "=Index(Range("C:C"), Match(Range("Prices!C1"), Range("Prices!C2:B34"), 0), 0)" Selection.AutoFill Destination:=Range("C2:C2" & ULastRow) 

请参阅下面的链接数据示例(不幸的是,我无法将它们添加到内联:

客户得到什么: https : //copy.com/EBABGl2EFjyFWcIH

“价格”或参考数据https://copy.com/oSSJuu7Dk4ox84tz

任何build议将不胜感激。

提前致谢!

Imho这是一个“使用数据库而不是Excel”的经典案例,特别是如果你想定期做这些查询的话。

然而,像这样的东西应该达到你想要的VBA:

 Dim customer As String Dim region As String Dim price as Double For r = 2 To ThisWorkbook.Worksheets("Client").UsedRange.Rows.Count customer = ThisWorkbook.Worksheets("Client").Cells(r, 1).Value region = ThisWorkbook.Worksheets("Client").Cells(r, 2).Value price = 0.00 For s = 2 To ThisWorkbook.Worksheets("Prices").UsedRange.Rows.Count If ThisWorkbook.Worksheets("Prices").Cells(s, 1).Value = customer And ThisWorkbook.Worksheets("Prices").Cells(s, 2).Value = region Then price = ThisWorkbook.Worksheets("Prices").Cells(s, 3).Value Exit For End If Next If price = 0.00 Then ThisWorkbook.Worksheets("Client").Cells(r, 3).Value = "This customer/region combination is not stored in the reference sheet" Else ThisWorkbook.Worksheets("Client").Cells(r, 3).Value = price End If Next 

相应地更改您的工作表和起始行(r)