Vba 根据不工作的条件删除行
我不熟悉宏函数,一直试图删除excel数据ETB_DT列的4:00、12:00、20:00行,以便显示8小时表,即00:00、08:00、16:00、24:00行 下面是我当前数据的示例Vba 根据不工作的条件删除行,vba,excel,datetime,Vba,Excel,Datetime,我不熟悉宏函数,一直试图删除excel数据ETB_DT列的4:00、12:00、20:00行,以便显示8小时表,即00:00、08:00、16:00、24:00行 下面是我当前数据的示例 ETB_DT_TEST PREDICTED_RECORDS Friday 00:00:00.0000000 3 Saturday 00:00:00.0000000 4 Friday 04:00:00.0000000
ETB_DT_TEST PREDICTED_RECORDS
Friday 00:00:00.0000000 3
Saturday 00:00:00.0000000 4
Friday 04:00:00.0000000 105
Saturday 04:00:00.0000000 5
Friday 08:00:00.0000000 10
Saturday 08:00:00.0000000 15
Friday 12:00:00.0000000 30
Saturday 12:00:00.0000000 112
Friday 16:00:00.0000000 56
Saturday 16:00:00.0000000 45
Friday 20:00:00.0000000 10
Saturday 20:00:00.0000000 5
Friday 24:00:00.0000000 34
Saturday 24:00:00.0000000 115
我已经尝试了下面的代码,但它似乎不工作
Sub Button2_Click()
Dim pattern As String
pattern = "04:00"
RowCount = ActiveSheet.UsedRange.Rows.Count
Dim i As Integer
For i = 1 To RowCount
Dim j As Integer
For j = 1 To 1
If Cells(i, j) = pattern Then
Cells(i, j).EntireRow.Delete
End If
Next j
Next i
End Sub
下面是所需输出的示例
ETB_DT_TEST PREDICTED_RECORDS
Friday 00:00:00.0000000 3
Saturday 00:00:00.0000000 4
Friday 08:00:00.0000000 10
Saturday 08:00:00.0000000 15
Friday 16:00:00.0000000 56
Saturday 16:00:00.0000000 45
Friday 24:00:00.0000000 34
Saturday 24:00:00.0000000 115
你有什么想法吗?感谢您的帮助。试试这段代码
With Sheet.UsedRange 'replace Sheet with your Sheet
For i = .Rows.Count To 2 Step -1
If InStr(.Cells(i, 1).Value, "8:00:00") = 0 And InStr(.Cells(i, 1).Value, "16:00:00") = 0 And InStr(.Cells(i, 1).Value, "24:00:00") = 0 Then 'change 1 to your column.
.Cells(i, 1).EntireRow.Delete
End If
Next i
End With
Sub test()
Dim rngDB As Range, rng As Range
Dim rngU As Range, vArray
Dim i As Integer, isYes As Boolean
Set rngDB = Range("a1", Range("a" & Rows.Count).End(xlUp))
vArray = Array("04:00:00", "12:00:00", "20:00:00")
For Each rng In rngDB
isYes = False
For i = 0 To UBound(vArray)
If InStr(rng, vArray(i)) Then
isYes = True
Exit For
End If
Next i
If isYes Then
If rngU Is Nothing Then
Set rngU = rng
Else
Set rngU = Union(rngU, rng)
End If
End If
Next rng
If rngU Is Nothing Then
Else
rngU.EntireRow.Delete
End If
End Sub
试试这个代码
Sub test()
Dim rngDB As Range, rng As Range
Dim rngU As Range, vArray
Dim i As Integer, isYes As Boolean
Set rngDB = Range("a1", Range("a" & Rows.Count).End(xlUp))
vArray = Array("04:00:00", "12:00:00", "20:00:00")
For Each rng In rngDB
isYes = False
For i = 0 To UBound(vArray)
If InStr(rng, vArray(i)) Then
isYes = True
Exit For
End If
Next i
If isYes Then
If rngU Is Nothing Then
Set rngU = rng
Else
Set rngU = Union(rngU, rng)
End If
End If
Next rng
If rngU Is Nothing Then
Else
rngU.EntireRow.Delete
End If
End Sub
以前,
代码
之后,
您的星期五似乎在dddd和hh之间有两个空格
代码
之后,
您的星期五似乎在dddd和hh之间有两个空格您好,这给了我一个无误的下一个,您知道为什么吗?@Faheera抱歉,我忘记了
结束if
。应该行得通now@velblúd-虽然可能需要OP的确认,但我相信这些文本看起来像datetimes,而不是真实的datetimes。Excel没有可以显示7位小数的数字格式;最大值为小数点后3位(例如毫秒)。嗨,我忘了提到数据在excel中不是小时格式,但它是文本,它仍然可以使用该代码吗?我更改了条件,所以现在它将“看起来像日期时间的文本”视为文本。嗨,这给了我一个无误的下一个,你知道为什么吗?@Faheera抱歉,我忘了结束if
。应该行得通now@velblúd-虽然可能需要OP的确认,但我相信这些文本看起来像datetimes,而不是真实的datetimes。Excel没有可以显示7位小数的数字格式;最大值为小数点后3位(例如毫秒)。嗨,我忘了提到数据在excel中不是小时格式,但它是文本,它仍然可以使用该代码吗?我更改了条件,所以现在它将“看起来像日期时间的文本”视为文本。请阅读-总结是,这不是解决志愿者问题的理想方式,而且可能对获得答案起到反作用。请不要将此添加到您的问题中。您声明要“删除4:00、12:00、20:00行”,同时保留“08:00、16:00、24:00行”。什么,请告诉我你打算怎么处理00:00:00排?@Jeeped嗨,我忘了说我也打算保留它我已经通过了你对这个问题的投票,因为在故事碎片被移除后,你至少尝试过自己的代码;真是太好了!然而,至少有两个突出的事实从原始问题中被省略,这将加速解决问题。请记住这一点,以备将来之用;帮助我们帮助你@Jeeped非常感谢您的帮助,请记住,下次请阅读-总结是,这不是一个理想的方式来解决志愿者,可能会适得其反获得答案。请不要将此添加到您的问题中。您声明要“删除4:00、12:00、20:00行”,同时保留“08:00、16:00、24:00行”。什么,请告诉我你打算怎么处理00:00:00排?@Jeeped嗨,我忘了说我也打算保留它我已经通过了你对这个问题的投票,因为在故事碎片被移除后,你至少尝试过自己的代码;真是太好了!然而,至少有两个突出的事实从原始问题中被省略,这将加速解决问题。请记住这一点,以备将来之用;帮助我们帮助你@吉佩德也非常感谢你的帮助,下次我会记住这一点