L
L
lex9122020-08-14 17:24:52
Macros
lex912, 2020-08-14 17:24:52

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

1 answer(s)
B
BasiC2k, 2020-08-14
@BasiC2k

Your question is too general. Please specify it.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question