我有55437行数据。
我的目标是仅过滤1pm至7pm之间的流量。从时间间隔可以看到,每分钟有3个读数,因此手动进行将需要很长时间。是否可以使用VBA删除不在指定时间段内的所有行?
谢谢。
这是我将0.541666667更改为0.54166666之后的最佳答案的样子:
答案 0 :(得分:1)
首先,您需要了解日期和时间在excel中的工作方式。
尽管您的列似乎只用时间戳记填充(由于您选择的格式),但该单元格实际上带有日期。如果您查看照片中的Formula Bar
,还可以看到日期。
所有日期都可以转换为相应的数字。两者之间的关系为Date.Time
= Integer.Decimal
。每个整数对于一个日历日都是唯一的(您可以通过将0
转换为日期来找到起点)。由于时间不是唯一的(即时钟每天凌晨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
答案 1 :(得分:-1)
在日期和时间格式中,您的前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