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

时间:2017-01-25 04:08:41

标签: excel vba excel-vba

我有下面的代码,它将识别一个星期日,并在Col M中突出显示值,如果它们大于1并且文本为#34;则等待"在col P。

我想做的是:

  1. 我的日期和时间格式为MM / D / YYYY TIME(示例) - 2017年1月22日23:30
  2. 我想以23:59的时间减去日期的星期日时间,并且应该用col M中的值减去剩余的数字,如果值仍大于col M则应突出显示在红色。
  3. 示例场景:

    如果日期/时间是col K中的1月22日21:00,那么这里的剩余时间是0.3小时..这应该从col M中的值中减去,假设col M有1.3,所以1.3-0.3 = 1.所以应该突出显示。

    示例输出: Sample Output

    代码:

    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
    

1 个答案:

答案 0 :(得分:0)

正如我在评论中提到的,只需更改remainingDay的数据类型,因为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