删除某些时间VBA

时间:2018-07-17 08:16:34

标签: excel vba excel-vba

我希望有人可以帮助我解决该问题。我正在尝试删除VBA的00:00:00-22:59:59之间的所有值。

我使用以下方法将时间与日期分开了:

ActiveCell.FormulaR1C1 = "=RIGHT(RC[1],8)"

例如,这给我留下了00:27:37。

我已经搜索了很多答案,但是找不到合适的解决方案。我尝试使用以下方法,但不起作用:

Dim lr As Long, i As Long

lr = Cells(Rows.Count, "B").End(xlUp).Row

For i = lr To 1 Step -1
    If IsNumeric(Cells(i, "B")) And _
     Cells(i, "B").Value2 < TimeSerial(23, 0, 0) And _
     Cells(i, "B").Value2 <> "" Then
       Rows(i).EntireRow.Delete
    End If
Next i

谢谢。

3 个答案:

答案 0 :(得分:2)

在= RIGHT公式使底部的公式正确工作后,建议* 1。

谢谢,请参阅下面的解决方案。

Columns("B:B").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("B2").Select
ActiveCell.FormulaR1C1 = "=RIGHT(RC[1],8)*1"
Selection.AutoFill Destination:=Range("B2:B" & Range("A" & Rows.Count).End(xlUp).Row)

Dim lr As Long, i As Long

lr = Cells(Rows.Count, "B").End(xlUp).Row

For i = lr To 1 Step -1
 If IsNumeric(Cells(i, "B")) And _
 Cells(i, "B").Value2 < TimeSerial(23, 0, 0) And _
 Cells(i, "B").Value2 <> "" Then
   Rows(i).EntireRow.Delete
 End If
Next i

答案 1 :(得分:2)

Excel中的日期和时间是数字值,其中日期表示为整数(自1900年1月1日以来的天数),时间表示为数字的小数部分,范围为0(00 :00)和<1(24:00)

因此您可以通过

隔离日期/时间值组合的时间
vTime = vDateTime - Int(vDateTime)

然后,您寻找的时间是> = 23:00,以数字形式表示的时间是> = 23/24

示例:

Sub Find23()
Dim vTime As Date, vDateTime As Date

    vDateTime = #7/17/2018 11:00:00 PM#
    Debug.Print vDateTime

    vTime = vDateTime - Int(vDateTime)
    Debug.Print vTime

    If vTime >= 23 / 24 Then
        Debug.Print "it was late in the evening ..."
        ' do your stuff here
    End If

End Sub

enter image description here

答案 2 :(得分:0)

  

我正在尝试删除VBA的00:00:00-22:59:59之间的所有值。

将数据保留23小时会更容易吗?

Dim lr As Long, i As Long

lr = Cells(Rows.Count, "B").End(xlUp).Row

For i = lr To 1 Step -1
    If IsNumeric(Cells(i, "B")) and not isempty(Cells(i, "B")) then
        if hour(Cells(i, "B").Value2) <> 23 then
            Rows(i).EntireRow.Delete
        End If
    End If
Next i