![根据字符位置在 Excel 中拆分数据](https://linux22.com/image/1437271/%E6%A0%B9%E6%8D%AE%E5%AD%97%E7%AC%A6%E4%BD%8D%E7%BD%AE%E5%9C%A8%20Excel%20%E4%B8%AD%E6%8B%86%E5%88%86%E6%95%B0%E6%8D%AE.png)
我有一列数据,每行包含一组 83 个字符(例如 010203 344345 929348238482abcde33 4566),没有特定的模式需要拆分成不同长度的块(例如 6,1,6,6,4,4,...4,1,1)。以编程方式拆分这些块的最佳方法是什么?设置 VBA 列表并循环遍历可能是最好的选择吗?
答案1
这应该可以满足您的要求:
中的公式B2
很特殊,因为它从以下开始:
=MID($A2, 1, B1)
但然后C2
可以向下复制全部剩余的 18 列D2
-> LastCol2
:
=MID($A2,SUM($B$1:B$1)+1, C$1)
然后复制整行下来,公式应该会自动正确填充。
答案2
Max,我想我明白你希望用逗号分隔数据。幸运的是,Excel 有一个内置工具可以做到这一点。见下文:
希望这是您想要的,否则请尝试使用文本到列工具,因为它比编写一堆 Excel 函数更容易。
答案3
我假设您希望数据集中的每一行都有一组不同的描绘。以下代码就是为此目的。
在数据左侧创建一列。确保没有空白。选择该列中的所有单元格并运行代码。它将在列右侧吐出 83 个字符的分隔符。顺便说一句,如果分隔符的总和大于字符长度(在本例中为 83),它将出错。
希望这能有所帮助。
凯尔
Sub SplitManyTimes()
Dim r As Range, rng As Range
Dim arr As Variant
Dim lLength As Long, lStart As Long, i As Long
Set rng = Selection
For Each r In rng
lStart = 1
arr = Split(r, ",")
For i = 1 To UBound(arr) + 1
lLength = Val(arr(i - 1))
r.Offset(0, i + 1) = Mid(r.Offset(, 1), lStart, lLength)
lStart = lStart + lLength
Next i
Next r
End Sub