好问题。您需要将数组Join
Sub Filtering()
Dim arr As Variant: arr = Array("Hello","World","Wide","Web")
With Application
Dim MX_LEN As Long: MX_LEN = .Evaluate("MAX(LEN({""" & Join(arr,""",""") & """}))")
End With
End Sub
:
MX_LEN = EVALUATE("MAX(LEN(" & Rng.Address & "))")
详细说明其工作原理:
.Evaluate
需要以有效公式的形式输入字符串。因此,我们需要考虑如何将其写在Excel工作表中。 OP提到A1:A5
有效。非常合乎逻辑,因为在将要读取的工作表上(让我们假设rng为=MAX(LEN(A1:A5))
):
Evaluate
现在,由于=MAX(LEN({"Hello","Web"}))
将认识到我们打算将其作为数组公式输入,因此它将返回正确的值。
OP表示,他希望提供数据以运行数组。因此,我们可以颠倒逻辑,并考虑工作表上的功能如何:
Join
现在,我们只需要使用Debug.Print "MAX(LEN({""" & Join(arr,""") & """}))"
来构建该字符串,并且不要忘记卷曲的括号。要检查我们是否正确构建,可以使用With Application
MX_LEN = .Evaluate("MAX(LEN({""" & Join(.Transpose(.Index(arr,1)),""") & """}))")
End With
如果我们想模仿这个,但是对于二维数组的第一维,我们可以应用以下内容:
Evaluate
一个捕获,就像在很多情况下一样,您的字符串不能超过255个字符。否则.Evaluate
将返回错误(根据文档)
这意味着value2
不能用在大字符串上,从而使遍历数组成为最有效的定位策略。
但是,如果您真的不想循环,可以改为使用公式填充单元格,然后读取单元格的结果With Application
Sheet1.Range("A1").Formula = "=MAX(LEN({""" & Join(.Transpose(.Index(arr,""") & """}))"
End With
:
MX_LEN = Sheet1.Range("A1").Value2
现在您可以阅读以下内容:
{{1}}
本文链接:https://www.f2er.com/3066235.html