Как сделать код, который удаляет строку, если дата старше - PullRequest
0 голосов
/ 16 апреля 2019

Я создаю инструмент, который должен удалять строки, у которых в столбце «E» даты старше 01-01-2019.

Sub OlderDateDelete()

Dim i As Variant

Application.DisplayAlerts = False

For i = Sheets("Iberica Not Sent").Count To 2 Step -1
    If Sheets(i).Range("E2").Value < DateValue("01/01/2019") Then
        Sheets(i).Delete
    End If
Next i

Application.DisplayAlerts = True

End Sub

Ответы [ 3 ]

0 голосов
/ 16 апреля 2019

Самое простое, что я придумаю, - это поместить дату «01/01/2019» в ячейку, в моем примере - «G1»

Затем преобразуйте каждый диапазон в эту ячейку и удалите их:

Sub DeletePreviousYears()
Dim i As Long
Dim LastRow As Long
LastRow = Sheets("Iberica Not Sent").Range("E" & Rows.Count).End(xlUp).Row

Application.DisplayAlerts = False


For i = LastRow To 2 Step -1

   If Range("E" & i) <> "" And Range("E" & i).Value < Range("G1").Value Then
       Rows(i).Delete
   End If

Next i

Application.DisplayAlerts = True
End Sub

Лучше всего также использовать функцию, чтобы найти последнюю строку и вернуться к своему циклу.Также с вашим первым кодом, использующим Sheets, вы просматривали листы, а не строки.

0 голосов
/ 16 апреля 2019

Это ответ на ваш письменный вопрос.Вы можете использовать Autofilter, а затем удалить все видимые данные, кроме строки заголовка.

With Sheets("Iberica Not Sent")
    .AutoFilterMode = False
        With Range("A1").CurrentRegion
            .AutoFilter Field:=5, Criteria1:="<01/01/2019"
            On Error Resume Next
            .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        End With
    .AutoFilterMode = False
End With

Или вы можете выполнить цикл следующим образом

Dim lr As Long
Dim i As Long

lr = Cells(Rows.Count, 1).End(xlUp).Row

    For i = lr To 2 Step -1
        If Cells(i, "E") < DateValue("01/15/2019") Then
            Cells(i, "E").EntireRow.Delete
        End If
    Next i

Я предпочитаю использовать фильтр.

0 голосов
/ 16 апреля 2019

Смотрите эти строки:

If Sheets(i).Range("E2").Value < DateValue("01/01/2019") Then
    Sheets(i).Delete
End If

Эти строки будут удалять ваш лист.

Я думаю, вы должны отредактировать его так:

If Rows(i).Range("E2").Value < DateValue("01/01/2019") Then
    Rows(i).Delete
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...