删除未格式化为日期的行

时间:2016-09-26 06:25:22

标签: excel vba date format

在我的专栏A中,我有包含格式化日期和一般格式的单元格。我想删除不是日期的行,我已经制作了这段代码,但我必须多次运行才能删除所有不是日期的行。

My column is like the one showed in the picture

代码:

Sub del_row_not_date()

Dim rng_A_last As Long
Dim i As Integer

rng_A_last = Sheet1.Cells(Sheet1.Rows.Count, "A").End(xlUp).Row
Debug.Print rng_A_last

For i = 1 To rng_A_last Step 1
    If IsDate(Sheet1.Cells(i, 1)) = False Then
        Sheet1.Cells(i, 1).EntireRow.Delete
    End If
Next
End Sub

提前致谢!

2 个答案:

答案 0 :(得分:0)

你可以尝试

Sub del_row_not_date()
    With Sheet1
        .Range("A1", .Cells(.Rows.Count, "A").End(xlUp)).SpecialCells(xlCellTypeConstants, xlTextValues).EntireRow.Delete
    End With
End Sub

以上内容删除所有列“A”非数字单元格整行

如果您的单元格的数字不是日期,请使用:

Option Explicit

Sub del_row_not_date()
    Dim i As Integer

    With Sheet1
        For i = .Cells(.Rows.Count, "A").End(xlUp).Row To 1 Step -1 '<--| loop backwards not to loose next row index after deleting the current one
            If Not IsDate(.Cells(i, 1)) Then .Cells(i, 1).EntireRow.Delete
        Next i
    End With
End Sub

答案 1 :(得分:0)

因为行

基于此LINK,我发现了这个:

关于根据条件删除行的提示如果从顶部开始向下工作,每次删除行时,计数器将有效地移动到删除行下面两行的单元格,因为删除行正下方的行行向上移动(即根本没有测试)。

这有效:)

Sub del_row_not_date()

Dim rng_A_last As Long
Dim i As Integer

rng_A_last = Sheet1.Cells(Sheet1.Rows.Count, "A").End(xlUp).Row
Debug.Print rng_A_last

For i = rng_A_last To 1 Step -1
    'Debug.Print Cells(i, 1).Value
    If IsDate(Sheet1.Cells(i, 1)) = False Then
        Sheet1.Cells(i, 1).EntireRow.Delete
    End If
Next
End Sub