首页 > 解决方案 > VBA Excel:我对使用哪个运算符感到困惑。“或”不能给出正确的结果,“和”也不能给出正确的结果

问题描述

如果 AJ 或 AK 列中的日期在 2 周内,我希望该行变为黄色,如果 AJ 或 AK 列是今天,我希望该行变为红色

我正在使用 VBA,我首先为 AJ 编写了代码,它运行良好。然后我使用了“或”运算符,它没有显示所需的结果

Dim i As Long 'i is a counter for rows
Const StartRow As Byte = 6 'Number of start row
Dim LastRow As Long 'lastrow is the last row
Dim myValue As Long 'myValue refers to difference between dates(today and AJ)
LastRow = Range("A" & StartRow).End(xlDown).Row

For i = StartRow To LastRow
    myValue = Range("AJ" & i).Value - Range("AJ1").Value Or Range("AK" & i).Value - Range("AJ1").Value 'AJ1 has today's date
    Select Case myValue

    'if AJ or AK is less than 14(in 2 weeks), row should be yellow
    Case 1 To 14
       Excel.Range("A" & i, "AP" & i).Interior.ColorIndex = 6 '6 is yellow

    'if AJ or AK is 0 (that is today), then row should be red
    Case 0
    Excel.Range("A" & i, "AP" & i).Interior.ColorIndex = 3 '3 means red

    'if AJ or AK is passed, row should go back to no fill
    Case Is <= -1
    Excel.Range("A" & i, "AP" & i).Interior.ColorIndex = 0 '0 is no fill
    End Select Next i

预计该行会根据情况变为黄色或红色

标签: excelvbaoperators

解决方案


我认为这可能会有所帮助:

For i = StartRow To LastRow Step 1
    'red if column AJ or AK is today
    If Range("AJ" & i).Value = Date Or Range("AK" & i).Value = Date Then
        'color red whatever you want
        Range("A" & i, "AP" & i).Interior.ColorIndex = 3 '3 means red
    ElseIf Abs(Date - Range("AJ" & i).Value) <= 14 Or Abs(Date - Range("AK" & i).Value) <= 14 Then
        'color yellow whatever you want
        Range("A" & i, "AP" & i).Interior.ColorIndex = 6 '6 is yellow
    End If
Next i

这段代码将像你的一样循环。首先,它将检查 AJ 或 AK 列中的日期是否等于今天。如果为真,它将使用红色为行着色。如果不是,那么它将检查 AJ 列中今天日期和日期之间的差异,以及 AK 列中今天日期和日期之间的差异。如果两者中的任何一个等于或小于 14,则表示日期为 2 周时间。

请注意:

  1. 在计算差异时,我使用今天的日期作为参考,使用命令Date. 如果您需要使用不同的日期作为参考来计算差异,请更改Date为您需要用作参考的日期。
  2. 我曾经Abs将差值作为正值返回。这样,它将检查日期是否在两周时间内,在今天的日期之前和之后。我的意思是,它检查未来过去。我这样做是因为也许差异可能是-13。这意味着也有 13 天的差异,但这个数字是负数。使用Case 1 To 14你忽略了这些情况。我不知道您的数据如何,因此请根据需要进行调整。
  3. 检查 if 时,如果两种情况都为假,那么它什么也不做,所以行颜色根本不会改变。

希望这会有所启发。


推荐阅读