我正在尝试编写一个使用我当前工作簿的代码并打开另一个工作簿,然后使用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和当前正在查找的所有金额一致)
如果有人有任何帮助会很棒!
非常感谢。
答案 0 :(得分:1)
这两个工作表引用不同......
Set myCPTRange = wsO.Range("I2:I3000")
Set myALLRange = ws0.Range("V2:V3000")
如果您始终在每个模块的顶部使用Option Explicit
,则可以避免此类错误。
修改强> 我不认为你可以在VBA中运行多值MATCH查找:你最好能做的是使用Range地址来构造适当的公式,然后使用wsO.Evaluate(yourformulahere)来运行它并获得输出