У меня есть столбец данных, каждая строка содержит набор из 83 символов (например, 010203 344345 929348238482abcde33 4566) без конкретного шаблона, который необходимо разбить на блоки различной длины (например, 6,1,6,6,4,4, ... 4,1,1). Каков наилучший способ программного разделения этих блоков? Будет ли лучше всего составить список VBA и просмотреть его?
3 ответа
Это должно сделать то, что вы ищете:
Формула в B2
особенная, потому что она начинает вас:
=MID($A2, 1, B1)
но тогда C2
можно скопировать на все 18 оставшихся столбцов D2
-> LastCol2
:
=MID($A2,SUM($B$1:B$1)+1, C$1)
Затем скопируйте всю строку вниз, и формулы должны правильно заполниться.
Макс, я думаю, я понимаю, что вы хотите, чтобы ваши данные были разделены запятыми. К счастью, в Excel есть встроенный инструмент для этого. Увидеть ниже:
Надеюсь, это то, что вам нужно, в противном случае попробуйте поэкспериментировать с инструментом text to column, так как это проще, чем написать кучу функций Excel.
Я предполагал, что вы хотите иметь различный набор разграничений для каждой строки в вашем наборе данных. Следующий код с этой целью.
Создайте столбец слева от ваших данных. Убедитесь, что нет пробелов. Выберите все ячейки в этом столбце и запустите код. Это будет выплевывать разрывы справа от вашего столбца с 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