【问题标题】:use WorksheetFunction with ctrl shift enter in VBA excel在 VBA excel 中使用 WorksheetFunction 和 ctrl shift enter
【发布时间】:2017-11-04 08:58:02
【问题描述】:

我想编写一个 VBA 代码来根据给定的值查找匹配的单元格,而不考虑文本和数字。

我们可以在 Excel 中这样做:=match("*207*", C:C & "",0) 按下 Ctrl+Shift+Enter

但在 VBA 中,代码 pos = WorksheetFunction.Match(lookup_value, lookup_range & "", 0) 不起作用。
有什么解决办法吗?

【问题讨论】:

  • pos 是一个范围吗?如果是这样,请尝试pos.FormulaArray = WorksheetFunction.Match(lookup_value, lookup_range & "", 0)
  • 查看 worksheet.evaluate。它会做数组公式。
  • pos 不能是范围。它是 Variant 类型。

标签: vba excel


【解决方案1】:

lookup_range & "" 在 VBA 中不起作用,因为您不能将 String 连接到 Range 对象或 Array。请改用Evaluate

pos=Sheet1.Evaluate("match(""*207*"", C:C & """",0)")

要在评估中使用变量,这样:

pos = Application.Evaluate("MATCH(""*" & lookup_value & "*""," & _
  lookup_range.Address(External:=True) & "& """",0)")

【讨论】:

  • 在VBA中,我想使用变量lookup_value,lookup_range。我在 UDF 中使用此代码。
  • @AliM67 - 然后只是“分解”公式以允许使用它们,不是吗?
  • @BruceWayne - 请解释更多。你的意思是这样吗:pos = Application.Evaluate("Match(" & lookup_value & ", " & lookup_range & " & "", 0)")
  • @AliM67 查看最后(添加)部分。
  • @A.S.H - 谢谢。它工作正常。我将其更改为以下以处理所有可能的用户输入:Application.Evaluate("MATCH(""" & CStr(lookup_value) & """," & lookup_range.Address(External:=True) & "& """",0)")
猜你喜欢
  • 2023-03-07
  • 2017-09-12
  • 2018-12-19
  • 1970-01-01
  • 2020-02-26
  • 1970-01-01
  • 2020-06-03
  • 2019-11-11
  • 1970-01-01
相关资源
最近更新 更多