列值上的excel vba行删除

时间:2014-02-15 02:55:21

标签: excel vba excel-vba

我的专栏'A'中有日期。格式如下:20130101

那将是2013年1月1日。如何编写宏脚本来删除日期为星期六或星期日的所有行?

感谢您的帮助。

我尝试了以下操作,但它不起作用。

'Piece together the date.
    dt = Mid(.Cells(Cell, 1), 7, 2) & "/" & _
         Mid(.Cells(Cell, 1), 5, 2) & "/" & Left(.Cells(Cell, 1), 4)

    'If the date is a Sat or Sun, delete the row.
    If Weekday(dt) = 1 Or Weekday(dt) = 7 Then
        .Rows(Cell).EntireRow.Delete

2 个答案:

答案 0 :(得分:1)

重新组织日期后切换月份和日期。例如,20130101正在翻译为2013年1月1日,但20130102正在翻译为2013年2月1日。

改变这个:

dt = Mid(.Cells(Cell, 1), 7, 2) & "/" & _
     Mid(.Cells(Cell, 1), 5, 2) & "/" & Left(.Cells(Cell, 1), 4)

到此:

dt = Mid(.Cells(Cell, 1), 5, 2) & "/" & _
     Mid(.Cells(Cell, 1), 7, 2) & "/" & Left(.Cells(Cell, 1), 4)

答案 1 :(得分:1)

假设您的日期格式为YYYYMMDD,那么您可以执行以下操作:

Sub RemoveSatSun()
    Dim dt As Date
    ' Replace Sheet1 with your own
    With Worksheets("Sheet1")
        i = 1
        Do Until .Cells(i, 1).Value = ""
            dt = Mid(.Cells(i, 1), 7, 2) & "/" & _
                 Mid(.Cells(i, 1), 5, 2) & "/" & _
                 Left(.Cells(i, 1), 4)

            If Weekday(dt) = 1 Or Weekday(dt) = 7 Then
                .Rows(i).Delete
                ' Because we have removed a row, decrement i to ensure we 
                ' don't miss a row since Excel VBA does not have a 
                ' loop continue statement
                i = i - 1
            End If

            i = i + 1
        Loop
    End With
End Sub

请注意,当我们删除一行时,我有i = i -1,因为如果我们不这样做,我们会跳过一行,因为我们会增加i。从你发布的代码中,我相信这是你问题的原因。

如果您的日期格式不同,请按照ARich的建议进行相应调整。

同样在这种情况下,您只需拨打.Rows(i).Delete而不是.Rows(i).EntireRow.Delete,但就我所见,做后者并没有什么坏处。