【问题标题】:VBA Index and MatchVBA 索引和匹配
【发布时间】:2015-12-15 21:56:17
【问题描述】:

我正在尝试编写一个代码,该代码使用我当前的工作簿并打开另一个工作簿,然后使用 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”代码及其对应的“ALL”金额,并搜索我从 6 月开始的以前的电子表格,如果有任何行在这两个条件中匹配,我想将 JuneMCPGRange 中的内容输出到原始文档的单元格中(这与 CPT 和当前正在查找的所有金额一致)

如果有人有任何帮助,那就太好了!

非常感谢。

【问题讨论】:

  • 您的实际问题是什么?有错误吗?如果是这样,在哪一行,错误描述是什么?
  • 运行时错误 424:需要对象,我忘了在上面的代码中添加将范围定义为范围的代码,但我仍然收到对象错误
  • 猜测您的 Match 函数正在返回一个错误,所以它返回一个 Nothing 对象,这会给您 424 错误。尝试在即时窗口中执行Application.WorksheetFunction.Match。
  • 你认为是因为我一开始就定义了范围吗?只留下 JuneMCPGRange?我的意思是我在上面定义了,所以我认为它会理解查看的位置
  • 否,如果 Match 函数找不到该值,则应返回 #N/A。

标签: vba excel indexing match


【解决方案1】:

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

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

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

编辑: 我认为您不能像在 VBA 中那样运行多值 MATCH 查找:您可以做的最好的事情是使用范围地址来构造适当的公式,然后使用 wsO.Evaluate(yourformulahere) 运行它并获取输出.

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

【讨论】:

  • 是的,我注意到了这一点并希望它能修复它,但我仍然收到对象错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 2021-05-25
  • 2011-11-26
  • 2015-10-30
  • 2014-11-14
  • 2020-07-05
相关资源
最近更新 更多