Посмотрите, делает ли этот код то, что вы хотите ...
Public Sub TransformData()
On Error GoTo CleanUp
Dim objSrcSheet As Worksheet, objDestSheet As Worksheet, lngEndRow As Long
Dim lngRow As Long, rngToCopy As Range, strColToDelimit As String
Dim strValueToDelimit As String, lngWriteRow As Long, arrValues, i As Long
' Change the below lines to suit your own workbook.
Set objSrcSheet = Worksheets("Source")
Set objDestSheet = Worksheets("Transformed")
strColToDelimit = "E"
objDestSheet.Cells.Clear
lngEndRow = objSrcSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
lngWriteRow = 1
Application.ScreenUpdating = False
Application.EnableEvents = False
For lngRow = 1 To lngEndRow
Application.StatusBar = "Processing Row " & lngRow & " of " & lngEndRow & " ..."
If lngRow Mod 500 = 0 Then DoEvents
Set rngToCopy = objSrcSheet.Rows(lngRow)
strValueToDelimit = objSrcSheet.Cells(lngRow, strColToDelimit)
arrValues = Split(strValueToDelimit, "|")
rngToCopy.Copy objDestSheet.Range("A" & lngWriteRow & ":A" & lngWriteRow + UBound(arrValues))
For i = 0 To UBound(arrValues)
objDestSheet.Cells(lngWriteRow, strColToDelimit) = arrValues(i)
lngWriteRow = lngWriteRow + 1
Next
Next
objDestSheet.Columns.AutoFit
objDestSheet.Activate
CleanUp:
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.StatusBar = ""
End Sub
... самым большим тестом здесь будет производительность, и хотя это должно сработать, вы можете потренироваться в поиске более эффективного решения.
Вам необходимо добавить код в новый модуль в редакторе VBA и изменить значения в верхней части кода, которые указывают на имена исходного и конечного листов. Как это настроено, вам нужно создать лист с именем Преобразованный , а имя листа с исходными данными установить на Источник , вы можете изменить его на имя листа, который есть у вас в рабочей тетради.
Он ищет в столбце E значение вашего разграничения.
Просто запустите макрос из меню разработчика, как и любой другой макрос, который вы запускали ранее.
Когда он обрабатывает, вы увидите, что он обновляет в строке состояния, сколько строк он сделал и сколько он определил, что нужно будет сделать.
до вас! В любом случае стоит попробовать.