excel - 将二维分隔字符串解析为范围

标签 excel vba string parsing

我有一个由行分隔的二维字符串,并且每行内由值分隔。

所以它是一个逗号分隔的字符串,每行末尾都有一个 EOL 标记。示例:

val1, val2, val3 ... valn [EOL]
val1, val2, val3 ... valn [EOL]
...
val1, val2, val3 ... valn [EOL]

如果我创建一个循环来通过 [EOL] split() 每一行,然后在该循​​环中创建另一个循环来通过 ',' split() 每个值,然后一次将每个值写入工作表中的一个单元格中永远,所以我正在寻找更有效的解决方案。

是否可以将字符串解析为二维数组/变体,然后将整个内容一次性写入命名范围?

最佳答案

我们可以按照@Macro Man 在评论中所说的去做。如果所有行都包含相同数量的逗号分隔值,那就很容易了。如果没有的话,事情会更加复杂。但仍然可以解决。

Option Base 0

Sub test()

 sString = "val1, val2, val3 ... valn" & Chr(10) & "val1, val2 ... valn" & Chr(10) & "val1, val2, val3, val4 ... valn" & Chr(10) & "val1" & Chr(10)

 Dim aDataArray() As Variant
 Dim lLinesCount As Long
 Dim lValuesCount As Long
 Dim lMaxValuesCount As Long

 aLines = Split(sString, Chr(10))
 lLinesCount = UBound(aLines)
 ReDim aDataArray(0 To lLinesCount, 0)

 For i = LBound(aLines) To UBound(aLines)
  aValues = Split(aLines(i), ",")
  lValuesCount = UBound(aValues)
  If lValuesCount > lMaxValuesCount Then lMaxValuesCount = lValuesCount
  ReDim Preserve aDataArray(0 To lLinesCount, 0 To lMaxValuesCount)

  For j = LBound(aValues) To UBound(aValues)
   aDataArray(i, j) = aValues(j)
  Next
 Next

 With ActiveSheet
  .Range("B2").Resize(lLinesCount + 1, lMaxValuesCount + 1).Value = aDataArray
 End With

End Sub

关于excel - 将二维分隔字符串解析为范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34962298/

相关文章:

C 修改函数参数中的字符串并取消引用

python - 从列表创建字符串的有效方法

javascript - 使用字符串创建变量

excel - 对象变量或未设置 block - 用户窗体

excel - 从唯一条目中添加和计算值

excel - 工作簿.save - "the following features cannot be saved in macro-free workbooks..."

c# - 将长嵌套的 Excel 公式转换为 C#

git - 我喜欢 git 但它对我的同事来说太重了.. 哪些 DVC 的进入阈值最低?

vba - excel 2013中多张工作表的索引匹配

vba - 什么都不做的错误处理