VBA指数和比赛

时间:2015-09-18 16:53:58

标签: vba excel-vba indexing match excel

我正在尝试编写一个使用我当前工作簿的代码并打开另一个工作簿,然后使用Index和Macth查找比较两种类型的标准来比较两者的数据。

Sub BCReport()
Dim wbO As Workbook
Dim wsO As Worksheet
Dim wbJune As Workbook, wsJune As Worksheet

Set wbO = ThisWorkbook
Set wsO = wbO.Sheets("Combined")

Set wbJune = Workbooks.Open("J:\15_0615_P.xls")
Set wsJune = wbJune.Sheets("Combined")

Set myRange = wsO.Range("AI2:AI3000")
Set myCPTRange = wsO.Range("I2:I3000")
Set myALLRange = ws0.Range("V2:V3000")

Set JuneCPTRange = wsJune.Range("I2:I3000")
Set JuneALLRange = wsJune.Range("V2:V3000")
Set JuneMCPGRange = wsJune.Range("AI2:AI3000")

For i = 1 To myRange.Rows.Count
    For j = 1 To myRange.Columns.Count

test = Application.WorksheetFunction.Index(JuneMCPGRange, Application.WorksheetFunction.Match(myCPTRange.Cells(i, j).Value & myALLRange.Cells(i,j).value, JuneCPTRange & JuneALLRange, 0))
    Next j
Next i

End Sub

我正在做的事情是我有一个7月份的文件(我当前的文件)和6月份的文件(我希望代码中的文件)。我想查看“CPT”代码及其相应的“全部”金额,并在6月份搜索我之前的电子表格,如果两条标准中的任何行匹配,我想将我在JuneMCPGRange中的内容输出到我原始文档的单元格中(这与CPT和当前正在查找的所有金额一致)

如果有人有任何帮助会很棒!

非常感谢。

1 个答案:

答案 0 :(得分:1)

这两个工作表引用不同......

Set myCPTRange = wsO.Range("I2:I3000")
Set myALLRange = ws0.Range("V2:V3000")

如果您始终在每个模块的顶部使用Option Explicit,则可以避免此类错误。

修改 我不认为你可以在VBA中运行多值MATCH查找:你最好能做的是使用Range地址来构造适当的公式,然后使用wsO.Evaluate(yourformulahere)来运行它并获得输出

参见例如最后答案:Concat multiple MATCH criteria in Excel VBA