因爲這兩個日期和時間格式不同於正常的,我們需要處理的數值得到的東西要測試的。請看下面的例子(我曾經評論的每一行,以幫助你跟着):
Sub DeleteRows()
Dim lastRow As Long
Dim Cell As Long
Dim dt As Date
'Work with the active sheet.
With ActiveSheet
'Find the last row of your dataset.
lastRow = .Range("A:A").Find("*", searchdirection:=xlPrevious).Row
'Format your time column to a readable time.
.Columns("B").NumberFormat = "[$-F400]h:mm:ss AM/PM"
'Loop through the rows, beginning at the bottom.
For Cell = lastRow To 2 Step -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
'If the time is before 7am or after 10pm, delete the row.
ElseIf Hour(.Cells(Cell, 1)) < 7 Or Hour(.Cells(Cell, 1)) > 22 Then
.Rows(Cell).EntireRow.Delete
End If
Next Cell
End With
MsgBox "Done!"
End Sub
有幾件事情需要注意的代碼。首先,我們必須從列表的底部開始,因爲當我們刪除行時,其餘行向上移動。如果我們從上到下(例如A1
到A10
),如果我們刪除第5行,第6行將滑入它的位置,並且循環將跳過第5行(先前第6行)並繼續到第6行。換句話說,當刪除行時從上到下循環將最終無意中跳過行。其次,我不得不猜測你的時間格式。雖然我相信我猜對了,但我可能沒有。如果我錯了,並且我的代碼沒有將時間列更改爲可讀時間,請在更改該列的格式的同時記錄一個宏,並將新格式替換爲我的("[$-F400]h:mm:ss AM/PM"
)。
最後,由於您的日期列是異常格式(對於Excel),我們需要重新排序日期以便Excel可以讀取它。一旦我們完成了,我們可以使用結果日期來查看日期是否爲星期六。或太陽。
你的時間是什麼格式?你的例子看起來只有幾分鐘? – ARich
你需要vba嗎? –