我有一个由行分隔的二维字符串,并且每行内由值分隔。
所以它是一个逗号分隔的字符串,每行末尾都有一个 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/