我的专栏'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
答案 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
,但就我所见,做后者并没有什么坏处。