Я не буду показывать вам свой код, потому что вы будете смеяться.
Никто в Stack Overflow никогда не будет смеяться или высмеивать попытки любого ОП узнать и расширить свой кругозор.Эта сеть существует исключительно для того, чтобы побудить других разработчиков быть лучшими, наиболее знающими разработчиками, какими они могут быть, и задавать вопросы, которые помогут им получить их.
Всегда полезно показать ваш код ради тех, ктокто может вам помочь.
Чтобы перейти к вашему вопросу, приведенный ниже код сделает именно то, что вы ищете, при условии, что ваши ячейки всегда имеют одинаковое количество разделителей.
Sub SplitContent()
Dim i As Long
Dim c As Long
Dim delim As Long
Dim dCount As Long
Dim endrow As Long
Dim txtArr
endrow = Range("A" & Rows.Count).End(xlUp).Row '<-this gets the last used row in Column A from the bottom up
For i = 2 To endrow '<- initializes loop for rows 2 to endrow
delim = Len(Cells(i, 1)) - Len(Replace(Cells(i, 1), Chr(10), "")) '<-get the number of delimiters in the cell
For dCount = 0 To delim '<- loop for each delimiter
For c = 1 To 4 '<- initializes loop for columns A:D
txtArr = Split(Cells(i, c), Chr(10)) '<-split function that you mentioned
Range("E" & i) = Range("E" & i) & txtArr(dCount) & " " '<- let E = itself + the dCount position of the column
Next c
Range("E" & i) = Range("E" & i) & Chr(10) '<- add carriage return once the column iteration has complete
Next dCount
Range("E" & i) = Left(Range("E" & i), Len(Range("E" & i)) - 1) '<- remove extra carriage return
Next i
End Sub
При этом, если у вас когда-либо будет разное количество разделителей, у вас будут проблемы.Вы бы хотели пойти по более динамичному маршруту и включить обработчик ошибок для обработки этих случаев, а также быструю проверку, какая ячейка имеет наибольшее количество разделителей, чтобы вы не пропустили никаких данных:
Sub SplitContent()
Dim i As Long
Dim c As Long
Dim delim As Long
Dim dCount As Long
Dim endrow As Long
Dim txtArr
On Error GoTo eHandler '<- this will handle cases where the delimiter count is does not match
endrow = Range("A" & Rows.Count).End(xlUp).Row '<-this gets the last used row in Column A from the bottom up
For i = 2 To endrow '<- initializes loop for rows 2 to endrow
For c = 1 To 4
If Len(Cells(i, c)) - Len(Replace(Cells(i, c), Chr(10), "")) > delim Then
delim = Len(Cells(i, c)) - Len(Replace(Cells(i, c), Chr(10), "")) '<-get the number of delimiters in the cell
End If
Next c
For dCount = 0 To delim '<- loop for each delimiter
For c = 1 To 4 '<- initializes loop for columns A:D
txtArr = Split(Cells(i, c), Chr(10)) '<-split function that you mentioned
Range("E" & i) = Range("E" & i) & txtArr(dCount) & " " '<- let E = itself + the dCount position of the column
Next c
Range("E" & i) = Range("E" & i) & Chr(10) '<- add carriage return once the column iteration has complete
Next dCount
Range("E" & i) = Left(Range("E" & i), Len(Range("E" & i)) - 1) '<- remove extra carriage return
delim = 0
Next i
Exit Sub
eHandler:
If Err.Number = 9 Then
Resume Next
End If
MsgBox Err.Number & vbCrLf & Err.Description
End Sub