将 Evaluate 与字符串变量一起使用,而不是与范围对象

时间:2021-04-13 14:51:45

标签: excel vba

我有一行代码根据范围 A1 中的值返回一维数组。示例假设 A1 中有一个值 6548102 并且我使用了这一行 x = [TRANSPOSE(MID(A1,1+len(A1)-ROW(OFFSET(A1,,,LEN(A1))),1))] 此行返回了 A1 中每个数字的一​​维数组 这是我的尝试

Sub Demo()
    Dim x
    Dim s As String
    s = "6548102"
    'x = [TRANSPOSE(MID(A1,1+len(A1)-ROW(OFFSET(A1,,,LEN(A1))),1))]
    x = [TRANSPOSE(MID(" & s & ",1+LEN(" & s & ")-ROW(OFFSET(" & s & ",,,LEN(" & s & "))),1))]
    Stop
End Sub

我试图用字符串变量替换 A1,但这个技巧似乎不起作用。 只是我需要使用相同的技术处理字符串而不是范围。

2 个答案:

答案 0 :(得分:2)

使用 VBA 很简单:

Sub ReverseDemo()
    dim s as string
    s = "6548102"

    dim x() as variant
    redim x(0 to len(s) - 1) as variant

    dim k as long
    k = 0 

    dim i as long
    for i = len(s) to 1 step -1
        x(k) = mid(s,i,1)
        k = k + 1
    Next i

    'Do something with x
End Sub

答案 1 :(得分:1)

拆分与评估

不要使用 [] 使用 Evaluate,并且不要将公式的 OFFSET 部分中的 A1 替换为要拆分的值。

Sub Demo()
Dim x
Dim s As String

    s = 123
    x = Evaluate("TRANSPOSE(MID(""" & s & """,ROW(OFFSET(A1,,,LEN(""" & s & """))),1))")
    Debug.Print Join(x, "-")
    
End Sub

字符串

如果你真的想分割一个字符串,你需要在整个过程中添加双引号。

Sub StringDemo()
Dim x
Dim s As String

    s = "Yassser"
    x = Evaluate("TRANSPOSE(MID(""" & s & """,ROW(OFFSET(A1,,,LEN(""" & s & """))),1))")
    Debug.Print Join(x, "-")
    
End Sub

实际上,您可能想使用第二个代码,因为它适用于字符串和数字。

反向

如果出于某种原因您希望字符/数字以相反的顺序排列,您可以使用它。

Sub ReverseDemo()
Dim x
Dim s As String

    s = "Reverse"
    x = Evaluate("TRANSPOSE(MID(""" & s & """,1+LEN(""" & s & """)-ROW(OFFSET(A1,,,LEN(""" & s & """))),1))")
    Debug.Print Join(x, "-")
End Sub
相关问题