使用Excel VBA评估一维数组中可变长度字符串之间的最大长度

我有一个一维数组,其中包含可变长度的字符串。我想使用EVALUATEMAXLEN函数的组合来找到这些字符串中的最大长度。

对于一个工作表Range声明为Rng,我知道以下代码有效:

MX_LEN = EVALUATE("MAX(LEN(" & Rng.Address & "))")

但是我无法使用一维数组Arr来实现类似的目的。

MX_LEN = EVALUATE("MAX(LEN(" & Arr & "))")

编辑

我得到Runtime error 13: Type Mismatch的以下代码。这是一个二维数组,我只访问其中的第一个维度。

观察

  • 这里的字符串略长,每个字符串大约100-200个字符。

  • 我看到了,Join中缺少了开头和结尾的双引号。

代码是:

MX = Application.Evaluate("MAX(LEN({""" & Join(Application.Transpose(Application.Index(Arr,1)),""",""") & """}))")

P.S:由于数组很小,我不想循环数组。

timberjack 回答:使用Excel VBA评估一维数组中可变长度字符串之间的最大长度

好问题。您需要将数组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

大家都在问