我有一行代码根据范围 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,但这个技巧似乎不起作用。 只是我需要使用相同的技术处理字符串而不是范围。
答案 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