Хочу удалить все строки, в которых дата старше 30 дней. Нашел подходящий макрос, но почему-то он удаляет строку со старой датой через 1.
Помогите поправить.
Макрос
Sub Макрос()
' Удаляем все старше 30 дней.
Dim iCell As Range, tmp As Date
Application.ScreenUpdating = False
tmp = Date - 30 ' более 30 дней
For Each iCell In Range(Cells(1, "D"), Cells(Rows.Count, "D").End(xlUp))
If iCell.Value < tmp Then iCell.EntireRow.Delete
Next
Application.ScreenUpdating = True
End Sub
Удалять нужно, двигаясь снизу вверх, иначе макрос переходит в следующую строку, а следующая строка уже другая, т.к. произошло смещение вверх.
Макрос
Sub Макрос()
Dim Дата As Date
Dim lr As Long, i As Long
' Отключение монитора, чтобы ускорить макрос.
Application.ScreenUpdating = False
'1. Здесь укажите количество дней.
' Более 30 дней.
Дата = Date - 30
'2. Поиск последней строки в столбце D.
' End не ищет в скрытых строках.
lr = Cells(Rows.Count, "D").End(xlUp).Row
'3. Удаление строк.
For i = lr To 1 Step -1
If Cells(i, "D").Value < Дата Then
Rows(i).Delete
End If
Next i
'4. Включение монитора.
Application.ScreenUpdating = True
End Sub
Точно, удаляя строку происходит сдвиг, и получается он пропускал по одной строке.
Спасибо ваш вариант работает.