Answer the question
In order to leave comments, you need to log in
How to make an excel macro work?
Good afternoon. Can you tell me how to make the macro work? File https://dropmefiles.com/dVnMA
Sub SplitCharacteristics()
Dim aData(), aHead(), aRes(), aSpl
Dim sHeader As String
Dim lRw As Long, lClmn As Long
Dim i As Long, n As Long, k As Long, p As Long, j As Long
With wsCSV ' лист с объединенными данными'
lRw = .Cells(.Rows.Count, 1).End(xlUp).Row
aData = .Range("A1:A" & lRw).Value ' объединенные данные в массив'
End With
With wsRes ' лист для выгрузки результата'
lClmn = .Cells(1, .Columns.Count).End(xlToLeft).Column
aHead = .Range("A1").Resize(1, lClmn).Value ' заголовки в массив'
End With
ReDim aRes(1 To lRw, 1 To lClmn) ' размерности массива для результата'
For i = 1 To lRw
If aData(i, 1) <> Empty Then
aSpl = Split(aData(i, 1), Chr$(10)) ' разделяем характеристики, помещаем в массив'
k = k + 1 ' строка в массиве результата'
For p = 0 To UBound(aSpl) ' проходим по характеристикам'
sHeader = Split(aSpl(p), ":")(0) ' заголовок характеристики'
For j = 1 To lClmn ' проходим по заголовкам на листе'
If aHead(1, j) = sHeader Then ' заголовок совпал'
aRes(k, j) = Split(aSpl(p), ":")(1) ' записываем характеристику'
Exit For ' выходим из цикла к следующей характеристике'
End If
Next j
Next p
End If
Next i
Application.ScreenUpdating = False
With wsRes
.Rows("2:" & .UsedRange.Rows.Count + 2).Delete 'чистим лист от старых данных'
.Range("A2").Resize(k, lClmn).Value = aRes ' выгружаем на лист новые данные'
End With
Application.ScreenUpdating = True
MsgBox "OK", 64, ""
End Sub
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question