我希望能够将格式化的字符串(例如下面的字符串)拆分成一个数组(稍后我将使用它)。
示例字符串:(x, f), (5, 6), (6, 1), (7, 8), (8, 5), (9, 5), (10, 5), (11, 3) , (12, 4), (13, 1), (14, 6), (15, 2), (16, 10)
每组括号将是一个维度,其中的数字将构成另一个。例如 strArray (4, 2) 将导致括号 4,数字 2 -> 在这种情况下为 8。
我曾考虑过通过使用多个 SPLIT 函数来强制它,并且我已经研究了正则表达式来做到这一点。我有信心制作一维数组,但在二维数组中挣扎。
我正在使用 Microsoft Excel 2016,并且是 VBA 的中级程序员。
这是我尝试处理每个括号的一种方法,但它不会产生二维数组:
Sub EvaluateString(txtString as String)
txtArray = Split(txtSTring, "),(")
If IsEmpty(txtArray) Then L=0 Else L=UBound(txtArray)
'remove leading "(" and last ")"
txtArray(0) = Replace(txtArray(0), "(", "")
txtArray(L) = Replace(txtArray(L), ")", "")
For i = 0 to L
'Do something
next i
End Sub
最佳答案
有趣的问题。我建议使用几个 Application
从原始字符串中“切片”两个一维数组,然后通过 Transpose
将它们“加入”到单个数组中的方法.
Sub Test()
'Prepare your string
Dim str As String: str = "(x, f), (5, 6), (6, 1), (7, 8), (8, 5), (9, 5), (10, 5), (11, 3), (12, 4), (13, 1), (14, 6), (15, 2), (16, 10)"
str = Replace(Replace(Replace(str, " ", ""), "(", ""), ")", "")
'Prepare your array
Dim arr As Variant: arr = Split(str, ",")
Dim lb As Long: lb = UBound(arr) + 1
'Prepare two "slicer" 1D-arrays
Dim slc1 As Variant: slc1 = Evaluate("TRANSPOSE((ROW(1:" & (lb / 2) & ")*2)-1)")
Dim slc2 As Variant: slc2 = Evaluate("TRANSPOSE(ROW(1:" & (lb / 2) & ")*2)")
'Slice your array and transpose it into a a single array to be used
With Application
arr = .Transpose(Array(.Index(arr, 1, slc1), .Index(arr, 1, slc2)))
End With
Debug.Print arr(4, 2)
End Sub
关于excel - 如何在vba中将字符串拆分为二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59717089/