excel - 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
预计该行会根据情况变为黄色或红色
解决方案
我认为这可能会有所帮助:
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 周时间。
请注意:
- 在计算差异时,我使用今天的日期作为参考,使用命令
Date
. 如果您需要使用不同的日期作为参考来计算差异,请更改Date
为您需要用作参考的日期。 - 我曾经
Abs
将差值作为正值返回。这样,它将检查日期是否在两周时间内,在今天的日期之前和之后。我的意思是,它检查未来和过去。我这样做是因为也许差异可能是-13。这意味着也有 13 天的差异,但这个数字是负数。使用Case 1 To 14
你忽略了这些情况。我不知道您的数据如何,因此请根据需要进行调整。 - 检查 if 时,如果两种情况都为假,那么它什么也不做,所以行颜色根本不会改变。
希望这会有所启发。
推荐阅读
- php - 使用具有多个查询的函数将 mysql 转换为 mysqli 的问题
- ios - Metal makeComputeCommandEncoder 断言失败
- javascript - JavaScript 和 Promise.all()
- python - Python检测游戏中何时按下键
- monit - monit - 检查网络错误:语法错误
- mysql - SQL 比较 2 表的差异需要很长时间
- kubernetes - 主机名更改后 kubectl get nodes 命令中的主机名未更新
- python - 没有 Spark 的 Kafka 到 Pandas 数据框
- model-view-controller - MVC - 如何通过构造函数传递参数
- xcode - 如何在 Swift 4 中以编程方式打印 Xcode UIview 名称