Вставить строки и разделительную строку, разделенные точкой с запятой

Seraph спросил: 28 апреля 2018 в 09:11 в: vba

Мои значения находятся в столбце 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 ответ

Sam ответил: 28 апреля 2018 в 09:48
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

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

Seraph ответил: 29 апреля 2018 в 09:48
Ошибка, которую я получаю со следующим кодом: Ошибка времени выполнения '1004' - Определенная пользователем или объектная ошибка
Sam ответил: 29 апреля 2018 в 10:34
В какой строке вы его получите?
Seraph ответил: 29 апреля 2018 в 10:51
Когда я просто запускаю код, я вижу эту ошибку. Код работает неправильно (не относится к какой-либо строке). Моя таблица данных начинается с A9 с столбцом H, имеющим строку с ';'
Sam ответил: 29 апреля 2018 в 11:37
Если вы поместите этот фрагмент в новую книгу и поместите некоторые простые данные, вы все равно получите ошибку?
Seraph ответил: 31 мая 2018 в 05:37
Спасибо всем, он работал нормально. Проблема была в наборе данных, который был отформатирован странно. Этот код работал нормально.