如果希望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
根据情况,行会变成黄色或红色
答案 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周内。
请注意:
Date
将今天的日期作为参考。如果您需要使用其他日期作为参考来计算差异,则将Date
更改为您需要使用作为参考的日期。Abs
将差值作为正值返回。这样一来,它将检查日期是否在两周后,即当前日期之后。我的意思是,它会检查未来和过去。我这样做是因为可能相差-13。这也意味着相差13天,但数字为负。使用Case 1 To 14
可以忽略这些情况。我不知道您的数据如何,请根据需要进行调整。希望这能带来一些启发。