INDEX MATCH VBA(return 基于两个条件的值)

INDEX MATCH VBA (return a value based on two criteria)

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

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

我想做的是:

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

传统的 vlookup 功能不起作用,因为需要满足多个条件(即我们可能对不同地区的同一客户有不同的价格)。

我已经尝试了以下但没有成功

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

"Prices"或参考数据https://copy.com/oSSJuu7Dk4ox84tz

如有任何建议,我们将不胜感激。

提前致谢!

恕我直言,这是 "use a database instead of 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)