#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
, и это ошибка.