使用VBA从一天中减去剩余小时数

我有下面的代码,将确定一个星期天,并突出显示Col M中的值,如果他们大于1,并有文本“等待”col P.

我想要做的是:

  1. 我有date和时间格式在MM / D / YYYY TIME(例子) – 2017年1月22日23:30
  2. 我想用时间23:59减去date的星期日时间,剩下的数字应该减去col M中的数值,如果数值仍然大于col M,那么它应该用红色突出显示。

示例scheme:

如果date/时间是Col K中的1/22/2017 21:00,那么这里的剩余小时数是0.3小时。这应该从col M中的值中减去,例如col M为1.3,所以1.3-0.3 = 1.所以应该突出显示。

示例输出: 示例输出

码:

Sub SundayDatefilter() Dim r, lastrow, remainingDay As Long lastrow = Range("M:P").Cells(Rows.count, "A").End(xlUp).Row Application.ScreenUpdating = False For r = 2 To lastrow remainingDay = 0 If Weekday(Range("K" & r).Value, vbSunday) = 1 Then remainingDay = Round((24 - Format(TimeValue(Range("K" & r)), "h")) / 24, 1) If InStr(1, Range("P" & r).Text, "waiting", vbTextCompare) > 0 Then If Range("M" & r) - remainingDay >= 1 Then Range("M" & r).Cells.Font.ColorIndex = 3 Else Range("M" & r).Cells.Font.ColorIndex = 0 End If End If End If Next r Application.ScreenUpdating = True End Sub 

正如我在我的评论中提到的,只是改变remainingDay的数据types为Long整型(无小数部分)。

 Sub SundayDatefilter() Dim r, lastrow, remainingDay As Double '<--- Correction lastrow = Range("M:P").Cells(Rows.Count, "A").End(xlUp).Row Application.ScreenUpdating = False For r = 2 To lastrow remainingDay = 0 If Weekday(Range("K" & r).Value, vbSunday) = 1 Then remainingDay = Round((24 - Format(TimeValue(Range("K" & r)), "h")) / 24, 1) If InStr(1, Range("P" & r).Text, "waiting", vbTextCompare) > 0 Then If Range("M" & r) - remainingDay < 1 Then '<--- Correction Range("M" & r).Cells.Font.ColorIndex = 3 Else Range("M" & r).Cells.Font.ColorIndex = 0 End If End If End If Next r Application.ScreenUpdating = True End Sub