我正在为客户做一些工作,他们会收到客户和地区的每周报告(工作表中有两列,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
非常感谢任何建议。
提前致谢!
答案 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)