簡體   English   中英

如何刪除時間范圍內的行(日期和時間格式,但我只希望在某些小時之間保留行)

[英]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之后的最佳答案的樣子:

這是我將0.541666667更改為0.54166666之后的最佳答案的解決方案

首先,您需要了解Excel中的日期和時間是如何工作的。

盡管您的列似乎僅由時間戳記填充(由於您選擇的格式),但該單元格實際上帶有日期。 如果您查看照片中的Formula Bar ,則也可以看到日期。

所有日期都可以轉換為相應的數字。 兩者之間的關系是Date.Time = Integer.Decimal 每個整數對於一個日歷日都是唯一的(您可以通過將0轉換為日期來找到起點)。 由於時間不是唯一的(IE時鍾每天將在下午1:00發出),十進制數字會在每天的同一時間重復。 一個簡單的十進制/時間轉換是noon = .50


話雖如此,我們可以通過以下方式解決您的問題

  1. 刪除整數(日期)
  2. 1:00 PM7:00 PM轉換為它們的小數部分(分別約為.541667.791667
  3. 遍歷行並提取小數。 如果提取的十進制數不在步驟2中確定的閾值之間,請轉到步驟4。
  4. 將該單元格添加到Union (單元格集合)中,並在末尾刪除Union (不需要的行)

值得一提的是,您可以通過幾種方式提取小數(時間)。 我正在使用INT函數,該函數將小數點后的所有值都變為0。您還可以使用Split或其他方法( MidLeftRightLenSearchFind


經過測試,工作正常

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM