[英]How to delete rows within a time frame (date&time format, but I want to only keep rows between certain hours)
我有55437行數據。
我的目標是僅過濾1pm至7pm之間的流量。 從時間間隔可以看到,每分鍾有3個讀數,因此手動進行將需要很長時間。 有沒有一種方法可以使用VBA刪除不在指定時間段內的所有行?
謝謝。
這是我將0.541666667更改為0.54166666之后的最佳答案的樣子:
首先,您需要了解Excel中的日期和時間是如何工作的。
盡管您的列似乎僅由時間戳記填充(由於您選擇的格式),但該單元格實際上帶有日期。 如果您查看照片中的Formula Bar
,則也可以看到日期。
所有日期都可以轉換為相應的數字。 兩者之間的關系是Date.Time
= Integer.Decimal
。 每個整數對於一個日歷日都是唯一的(您可以通過將0
轉換為日期來找到起點)。 由於時間不是唯一的(IE時鍾每天將在下午1:00發出),十進制數字會在每天的同一時間重復。 一個簡單的十進制/時間轉換是noon = .50
話雖如此,我們可以通過以下方式解決您的問題
1:00 PM
和7:00 PM
轉換為它們的小數部分(分別約為.541667
和.791667
) Union
(單元格集合)中,並在末尾刪除Union
(不需要的行) 值得一提的是,您可以通過幾種方式提取小數(時間)。 我正在使用INT
函數,該函數將小數點后的所有值都變為0。您還可以使用Split
或其他方法( Mid
, Left
, Right
, Len
, Search
, Find
等 )
經過測試,工作正常
Option Explicit
Sub ClockWorkOrange()
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<- Update
Dim LRow As Long, r As Range, myRange As Range, DeleteMe As Range
LRow = ws.Range("B" & ws.Rows.Count).End(xlUp).Row
Set myRange = ws.Range("B3:B" & LRow)
For Each r In myRange
If (r.Value2 - Int(r.Value2)) < 0.541666667 Or (r.Value2 - Int(r.Value2)) > 0.791666667 Then
If Not DeleteMe Is Nothing Then
Set DeleteMe = Union(DeleteMe, r)
Else
Set DeleteMe = r
End If
End If
Next r
If Not DeleteMe Is Nothing Then DeleteMe.EntireRow.Delete
End Sub
在日期和時間格式中,您的前2個字符為小時。 13:00-18:59是1:00 pm至6:59 pm。 因此,只需使用=LEFT()
來提取小時,如果小時在這兩個數字之間,則刪除該行。 應如下所示:
Sub TimeDelete()
rowcount = Cells(Cells.Rows.Count, "b").End(xlUp).Row
For Each n In Range("B1:b" & rowcount)
n = Left(n, 2)
If n >=13 And <=18 Then EntireRow.Delete
Else
End If
Next n
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.