在数组(ctrl + shift + enter)公式VBA

时间:2019-08-22 13:18:47

标签: excel vba

我正在尝试使用数组公式中的字符串变量。我之前在VBA中的常规公式中使用过变量,但绝对没问题,但是无论我如何尝试使用字符串连接(&"符号)拆分公式,这似乎都没有。该公式与硬编码的变量配合使用都很好。

该代码在循环内,在当前工作表的3列上匹配3个变量(从工作簿的另一个工作表中拉出)。然后它将返回该行位置(j),因此行j中单元格的数据可以在其他地方使用。

在单元格中使用公式时,可以很好地引用其他单元格中的变量。即-

{=MATCH(1,(A:A=H10)*(B:B=H11)*(C:C=H12),0)}

然后我按照下面的代码片段尝试了一些东西,但是遇到运行时错误'1004'

Dim Var1 As String
Dim Var2 As String
Dim Var3 As String
Dim j As Long
Dim test As String
Set Aw = Application.WorksheetFunction

test = "(A:A = """ & Var1 & """)"

  j = Evaluate(Aw.Match(1, [1*" & test & "*(B:B = "Hard_Coded_Var2")*(G:G = "Hard_Coded_Var3")], 0))

或者只是

  test = Var1 

  j = Evaluate(Aw.Match(1, [1* (A:A = & test &) *(B:B = "Hard_Coded_Var2")*(G:G = "Hard_Coded_Var3")], 0))

以下变量在硬编码变量时起作用

  Dim j As Long
  Set Aw = Application.WorksheetFunction

  j = Evaluate(Aw.Match(1, [1* (A:A = "Hard_Coded_Var1")*(B:B = "Hard_Coded_Var2")*(G:G = "Hard_Coded_Var3")], 0))

从理论上讲,最终结果将是这样-

  j = Evaluate(Aw.Match(1, [1* (A:A = Var1)*(B:B = Var2)*(G:G = Var3)], 0))

我遇到了运行时错误404“应用程序定义或对象定义错误”

非常感谢!

1 个答案:

答案 0 :(得分:1)

您需要将公式字符串与Evaluate一起使用以使用数组类型公式:

j = Evaluate("MATCH(1,(A:A=""" & Var1 & """)*(B:B=""" & Var2 & """)*(G:G=""" & Var3 & """),0)")