VBA Excel:我对使用哪个运算符感到困惑。 “或”不给出正确的结果,“和”也给出正确的结果

时间:2019-08-13 10:24:28

标签: excel vba operators

如果希望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

根据情况,行会变成黄色或红色

1 个答案:

答案 0 :(得分:0)

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

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列中的日期是否等于今天。如果为true,它将使用红色为行着色。如果不是,则它将检查AJ列中的今天日期和日期之间的差异以及AK列中的今天日期和日期之间的差异。如果两者均等于或小于14,则表示日期在2周内。

请注意:

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

希望这能带来一些启发。