INDEX MATCH VBA(根据两个标准返回值)

时间:2015-06-17 13:15:43

标签: excel vba excel-vba lookup formulas

我正在为客户做一些工作,他们会收到客户和地区的每周报告(工作表中有两列,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

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

非常感谢任何建议。

提前致谢!

1 个答案:

答案 0 :(得分:1)

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)