【问题标题】:VBA split array with delimiter without loopsVBA拆分数组,带分隔符,不带循环
【发布时间】:2018-06-22 15:36:44
【问题描述】:

所以我试图在不使用任何循环的情况下拆分数组。 xData 是一种存储 csv 文件数据的变体,csv 文件中的每一行都包含 ID;然后将每一行放入数组中的值。

dData.setNameArraydData.setDataArray 是一个自定义类型对象,用于存储已排序的数据以供以后使用。

我得到了循环:

Dim i As Integer
For i = 1 To UBound(xData)
    dData.setNameArray = Split(xData(i), ";")(0)
    dData.setDataArray = Split(xData(i), ";")(1)
Next i

但由于数据量很大,我想避免这种情况。我想删除 for loop 并按原样拆分数组,但它似乎不起作用。

还有其他方法可以避免使用循环吗?我发现Manipulating arrays without loops 第一个答案似乎是正确的方向。但我不是 100% 确定如何使用它(如果它可以成为一种方法)。

【问题讨论】:

  • 将其拆分为 tmp 变体类型 var 并在每次迭代时从那里提取数据。仍然是一个循环,但计算量较少。顺便说一句,什么是 setNameArray 和 setDataArray ?某种自定义类方法? ftm,什么是 xdata?
  • 另一种方法:将数组写入工作表范围(一步);使用.TextToColumns 方法拆分。然后将其读回一个变体数组(也只需一步完成)。
  • @Jeeped 对不起,如果我有点不清楚。 setNameArray 和 setDataArray 是存储数据以供以后使用的自定义数据类型。 xData 是一个数组,其中包含来自 csv 文件的信息。在 csv 文件中,每一行数据都存储为 ID;Value。
  • 设置一个计时器,以便您可以测量它。请务必使用隐藏工作表,并关闭屏幕更新。
  • 讨论了高分辨率计时器here:

标签: arrays excel vba delimiter


【解决方案1】:

我认为最有效的方法如下。注意使用Long 而不是Integer

Dim i As Long
For i = 1 To UBound(xData)
    Dim sa() As String
    sa = Split(xData(i), ";")
    dData.setNameArray = sa(0)
    dData.setDataArray = sa(1)
Next i

【讨论】:

  • 它将字符串拆分一次而不是两次
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
相关资源
最近更新 更多