gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:48:38 33 4
gpt4 key购买 nike

我有一个包含可变长度字符串的一维数组。我想使用 EVALUATE 的组合找到这些字符串中的最大长度, MAX & LEN功能。

我知道声明的工作表范围 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, 0, 1)), """, """) & """}))")

    P.S:我不想循环数组,因为数组非常小。

    最佳答案

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

    详细说明为什么会这样:

    .Evaluate 需要以有效公式的形式输入字符串。因此,我们需要考虑如何将其写在 Excel 表格中。 OP提到 MX_LEN = EVALUATE("MAX(LEN(" & Rng.Address & "))")工作。非常合乎逻辑,因为在将读取的工作表上(假设 rng 为 A1:A5 ):
    =MAX(LEN(A1:A5))

    现在,因为 Evaluate将认识到我们打算将其作为数组公式输入,它将返回正确的值。

    OP 说他想喂一个数组。因此,我们可以颠倒逻辑并思考工作表上的函数会是什么样子:
    =MAX(LEN({"Hello", "World", "Wide", "Web"}))

    现在我们只需要使用 Join 构建该字符串。不要忘记花括号。要检查我们是否正确构建它,可以使用 Debug.Print "MAX(LEN({""" & Join(arr, """,""") & """}))" 进行检查。

    如果我们想模仿这一点,但是对于二维数组的第一个维度,我们可以应用以下内容:
    With Application
    MX_LEN = .Evaluate("MAX(LEN({""" & Join(.Transpose(.Index(arr, 0, 1)), """,""") & """}))")
    End With

    一抓 ,就像在很多情况下一样,您的字符串不能超过 255 个字符。否则 Evaluate将返回错误(根据文档)

    这意味着 .Evaluate不能用于大字符串,因此对数组进行循环是最有效的首选策略。

    但是,如果您真的不想循环,您可以使用公式填充单元格,然后读取单元格的结果 value2 :
    With Application
    Sheet1.Range("A1").Formula = "=MAX(LEN({""" & Join(.Transpose(.Index(arr, 0, 1)), """,""") & """}))"
    End With

    现在您可以阅读以下内容:
    MX_LEN = Sheet1.Range("A1").Value2

    关于arrays - 使用 Excel VBA 评估一维数组中可变长度字符串的最大长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58953568/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com