Вставить строки и разбить строку, разделенную точкой с запятой - PullRequest
0 голосов
/ 22 мая 2018

Мои значения находятся в столбце H, а диапазон всей таблицы - A: N.Я получил приведенную ниже таблицу из сети и изменил ее, чтобы удовлетворить мои требованияТем не менее, кажется, что я что-то упускаю - было бы очень полезно, если бы кто-то мог помочь мне понять это.Вот код, который я использовал, и он ничего не делает с моей таблицей.Поскольку я новичок в VBA, для понимания кода было бы полезно иметь описательный комментарий.

Sub splitByColH()
    Dim r As Range, i As Long, ar As Variant
    Set r = Worksheets("Sheet2").Range("H999999").End(xlUp)
    Do While r.Row > 1
        ar = Split(r.Value, ";")
        If UBound(ar) >= 0 Then r.Value = ar(0)
        For i = UBound(ar) To 1 Step -1
            r.EntireRow.Copy
            r.Offset(1).EntireRow.Insert
            r.Offset(1).Value = ar(i)
        Next
        Set r = r.Offset(-1)
    Loop
End Sub

1 Ответ

0 голосов
/ 22 мая 2018
Sub splitByColH()
    Dim r As Range, i As Long, ar As Variant
    Set r = Worksheets("Sheet2").Range("H999999").End(xlUp) ' Set r to be the last cell used in col H

    Do While r.Row > 1 ' As long as the r row is > 1

        ar = Split(r.Value, ";") ' Take r cell (last in H col) and create an array of its values when split by ;
        If UBound(ar) >= 0 Then r.Value = ar(0) ' As long as ar contains more than one element
        For i = UBound(ar) To 1 Step -1 ' Step through all elements from last to first
            r.EntireRow.Copy ' Copy the entire row where r is
            r.Offset(1).EntireRow.Insert ' Paste it (insert) one row below
            r.Offset(1).Value = ar(i) ' Set the H col of the new row to be the i'th element of ar
        Next
        Set r = r.Offset(-1) ' point r to where it is minus one row
    Loop
End Sub

Я объяснил, что делает ваш код прямо сейчас.Это не имеет особого смысла, так что я предполагаю, что у вас где-то есть логическая ошибкаЕсли вы объясните желаемый результат более подробно, можно будет дать вам лучший ответ ..

...