excel - 如何在vba中将字符串拆分为二维数组?

标签 excel vba

我希望能够将格式化的字符串(例如下面的字符串)拆分成一个数组(稍后我将使用它)。

示例字符串:(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/

相关文章:

excel - 如何在Excel中叠加两个时间序列?

excel - 如何访问表中的数据?

excel - 使用 VBA 在 Excel 中刷新对 VBProject.VBComponents 所做的更改

vba - Excel 宏多行查找条件并插入

excel - 无法将三个单独的宏集成为一个,以便可以使用单个按钮触发它们

Excel VBA - 如何找到字典中最小和最大的键

excel - 触发 Cells.Select 属性时停止工作表跳转到页面顶部

excel - 错误91工作表变量设置范围

excel - 导入工作表更改工作表名称

excel - 将数据从一张表复制到另一张表的最有效的 vba 方法