Я бы предложил два метода ... сначала с кодом (возможно, это более грязный способ, чем предлагал Divin3, но для меня это проще понять). По сути, вы создаете массив, используя «,» в качестве разделителя, а затем собираете новые массивы для ненулевых элементов. Когда ноль найден, мы сохраняем текущую переменную массива и переходим к следующему, чтобы "собрать" непрерывные ненулевые сегменты:
Sub splitter()
Dim theNewArray(999)
theStr = ActiveCell.Value
theOldArray = Split(theStr, ",")
x = 0
theNewArray(x) = ""
For i = 0 To UBound(theOldArray)
If theOldArray(i) <> 0 And theOldArray(i) <> "0" Then
If Len(theNewArray(x)) > 0 Then
theNewArray(x) = theNewArray(x) & "," & theOldArray(i)
Else
theNewArray(x) = theOldArray(i)
End If
Else
If Len(theNewArray(x)) > 0 Then
x = x + 1
theNewArray(x) = ""
End If
End If
Next i
For i = 0 To (x - 1)
ActiveCell(1, (2 + i)).Value = theNewArray(i)
Next i
End Sub
Это даст вам следующее (где синий - исходные данные, а оранжевый - выходные данные):
В качестве альтернативы вы можете предпочесть сделать это с помощью пары простых функций ... выберите ваши данные и используйте «текст в столбцы»:
Скажем, ваши данные разделены. Выберите «другое» и введите 0 (ноль), как показано ниже:
Остальное можно оставить по умолчанию. В итоге вы получите результат, показанный ниже желтым цветом:
После этого вы можете очистить символы запятой, используя следующую формулу:
=IF(F1=",","",IF(LEFT(F1, 1)=",",IF(RIGHT(F1, 1)=",",MID(F1, 2, (LEN(F1)-2)),MID(F1,2,(LEN(F1)-1))),MID(F1, 1, (LEN(F1)-1))))
Результаты этой формулы - то, что вы видите выше оранжевым цветом.