【问题标题】:INDEX - MATCH formula with errors?INDEX - MATCH 公式有错误?
【发布时间】:2015-11-29 23:31:33
【问题描述】:

我有excel公式:

=INDEX('C:\Users\Desktop\[BOOK1.xlsx]Sheet1'!$J:$J,MATCH(A2,'C:\Users\Desktop\[BOOK1.xlsx]Sheet1'!$W:$W,0))

我在 Excel vba 中编写时遇到问题,这是我目前所拥有的:

Dim BOOK1 As Workbook
Dim bcklog1 As Worksheet

Set bcklog1 = BOOK1.Worksheets("backlog1")

Dim result As Variant
Dim match_formula As Variant

match_formula = "Match(Worksheets(1).Range("W:W"), 0)"
result = Evaluate(match_formula)
answer = Application.WorksheetFunction.Match(2, Worksheets(1).Range("W:W"), 0)
test = Application.WorksheetFunction.Index(Sheets("backlog1").Range("J:J"), result, 1)
index_formula = "Index(sales, result, )"
result2 = Evaluate(index_formula)

我无法获得任何结果,而且我的匹配公式不断出现错误。我的方法是否正确?某些结果将包含错误,这是意料之中的。该公式应在另一个工作簿中查找值并匹配它们。

【问题讨论】:

  • 在你的代码中让我印象深刻的第一件事是你从来没有Set BOOK1 到任何东西。
  • 本地A2 在哪里进入您正在构建的公式?为什么不简单 .Evaluate 字符串公式,您可以在评估之前选择更改字符串中的 A2?
  • @Ron Rosenfeld:为了让问题更简短,我省略了BOOK1 set as part。
  • @Jeeped:你能澄清一下吗?我似乎看不出那会去哪里。
  • 您的原始公式包含... MATCH(A2, ...,但字符串连接使用= Match(sales & PO, ...。它是哪一个? A2 是什么,在哪里?您是否尝试使用不同的 A2 创建新公式?

标签: vba excel indexing match


【解决方案1】:

目标:在 VBA 中重现工作表公式

=INDEX('C:\Users\Desktop\[BOOK1.xlsx]Sheet1'!$J:$J, MATCH(A2, 'C:\Users\Desktop\[BOOK1.xlsx]Sheet1'!$W:$W,0))

这是一个使用多种方法的渐进式结构。检查 VBE 的即时窗口中的 debug.print 输出。

'assumes that BOOK1 points to a workbook at this point
Dim bcklog1 As Worksheet
Set bcklog1 = BOOK1.Worksheets("backlog1")

Dim result As Variant, test As Variant
Dim frml As String, match_row As Long

'first we construct and evaluate the MATCH portion
frml = "match(A2, " & bcklog1.Range("W:W").Address(external:=True) & ", 0)"
Debug.Print frml
match_row = Evaluate(frml)
Debug.Print match_row

'next we build the remainder of the INDEX/MATCH around the match potion constructed earlier
frml = "index(" & bcklog1.Range("J:J").Address(external:=True) & ", " & frml & ")"
Debug.Print frml
result = Evaluate(frml)

'finally we abandon the Evaluate and use the match_row obtained earlier directly
test = Application.WorksheetFunction.Index(bcklog1.Range("J:J"), match_row, 1)
Debug.Print test

外部工作簿单元格范围地址以带有可选external:=True 参数的Range.Address property 的字符串形式引入。这将返回一个格式正确的字符串,包括工作簿的完整路径、需要时带单引号的工作表名称以及绝对单元格范围引用。

您可以通过以等号开头并将它们分配给目标单元格的Range.Formula property,将这些公式字符串构造写回目标工作表。 Application.Evaluate method 不需要等号。

【讨论】:

  • 感谢您提供有关参考外部工作簿的信息!!
  • 我收到错误 13:match_row 和 `test` 变量的类型不匹配。我更改了match_row as Variant 并消除了一个错误。 test 变量仍然返回错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 2021-10-15
相关资源
最近更新 更多