【问题标题】:Using a variable within an array (ctrl+shift+enter) formula VBA使用数组中的变量(ctrl + shift + enter)公式VBA
【发布时间】:2023-03-07 11:00:02
【问题描述】:

我正在尝试使用数组公式中的字符串变量。我之前在 VBA 中的常规公式中使用过变量绝对没问题,但无论我如何尝试使用字符串连接(&" 符号)拆分公式,它似乎都不需要。该公式适用于硬编码的变量。

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

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

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

然后我尝试了以下 sn-p 的内容,但得到运行时错误“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“应用程序定义或对象定义错误”

非常感谢!

【问题讨论】:

  • 即使使用硬编码变量,我也会收到错误消息。你确定它有效吗?据我所知,您需要在引号中使用实际公式,而不是在评估中使用 vba 版本。

标签: excel vba


【解决方案1】:

您需要使用带有 Evaluate 的公式字符串来使用数组类型公式:

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

【讨论】:

  • 斯科特太棒了。非常感谢。
  • @TJT 如果这回答了您的问题,请考虑通过单击答案旁边的复选标记将其标记为正确。
猜你喜欢
  • 2018-12-19
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 2016-03-24
  • 2022-01-14
  • 2017-09-12
相关资源
最近更新 更多