Вставьте строку при изменении значения в VBA Excel

#excel #vba

Вопрос:

Я пытаюсь создать цикл For, который проходит по столбцу и определяет, изменилось ли значение. Если значение изменилось, то оно вставляет строку.

 Sub InsertRow()
Dim cell As Range

For Each cell In Range("q3:q10")
    If cell.Value <> cell.Offset(-1, 0).Value Then
        cell.Offset(-1, 0).EntireRow.Insert
        End If

Next cell 

End Sub
 

То, как я пытаюсь это сделать, сравнивает ячейку с предыдущей продажей, и если значения не равны, она вставляет строку.

Линия

 If cell.Value <> cell.Offset(-1, 0).Value Then
 

работает.

Тем не менее, строка

 cell.Offset(-1, 0).EntireRow.Insert
 

приводит к сбою excel.

Примером столбца может быть:

Колонка
1
1
2
2
2
6
6

И я хотел бы вставить пустую строку, где цифры меняются.

Комментарии:

1. Если вы вставляете/удаляете, вы хотите сделать это в обратном порядке, поэтому вы не учитываете добавленные/удаленные позиции. For Петля с Step -1 этим приведет вас туда. «Невозможно выполнить цикл в обратном направлении, используя синтаксис для каждого цикла», должно быть первым большим хитом, если вы попытаетесь найти способ отменить свой for each .

Ответ №1:

Расширение комментариев на основе вашего кода:

 Sub InsertRow()
    'Dim cell As Range
    Dim iterator as Long

    'For Each cell In Range("q3:q10")
    For iterator = 10 to 3 Step -1
        'If cell.Value <> cell.Offset(-1, 0).Value Then
        If Cells(i,"Q").Value <> Cells(i-1,"Q").Value Then
            'cell.Offset(-1, 0).EntireRow.Insert
            Rows(i).Insert 'Inserting at your current row pushes your current row down one
        End If
    'Next cell 
    Next iterator 'FIXED
End Sub
 

Комментарии:

1. Спасибо вам за ответ! Я вроде как понимаю, о чем ты говоришь. Я попробовал код, который вы написали, но ` Следующий я ` возвращает ошибку «Ошибка компиляции: Недопустимая ссылка на следующую управляющую переменную».

2. @mlombar9 Измениться Next i на просто Next

3. @mlombar9 извините за это, я написал, iterator а не просто использовал i , и это ошибка.