我正在尝试编写一个代码,该代码根据先前定义的值(日期)更改指定区域中单元格的颜色。因此,如果定义的日期减去实际日期小于零,则单元格内部颜色将变为红色。
我正在从区域中提取数据:从第2行到160和第24列至第33列。我正在检查这些日期与实际日期之间的差异,如果其小于零,则需要该区域中的单元格:第2行至160,将列10至19更改为红色。
我写了一个简单的代码来仅测试它是否有效。但是颜色会跳过该条件而变为红色(某些值会逐渐变小然后为零,而任一种方式都是红色)。
Sub niowy()
Worksheets("External").Activate
For i = 2 To 160
For j = 24 To 33
For k = 10 To 19
If Cells(i, j).Value = "" Then
Cells(i, j).Select
Cells(i, k).Select
ElseIf Cells(i, j).Value - Date > 0 And Cells(i, j).Value - Date < 20 Then
Cells(i, k).Interior.Color = rgbOrange
ElseIf Cells(i, j).Value - Date < 0 Then
Cells(i, k).Interior.Color = rgbRed
End If
Next k
Next j
Next i
End Sub
如果您有任何想法可以加快代码速度或采用其他方法,我将不胜感激。考虑到我刚刚开始学习vba,因此代码可能很混乱。我还测试了“ datediff”功能,但失败了。
答案 0 :(得分:0)
Sub niowy()
Dim target As Range
Dim i As Long
Dim j As Long
With Worksheets("Main")
For i = 2 To 160
For j = 24 To 33
If Val(.Cells(i, j)) = 0 Then
Else
Set target = .Range("J" & i & ":t" & i)
Select Case (.Cells(i, j).Value - Date)
Case 1 To 20
target.Interior.Color = rgbOrange
Case Is < 0
target.Interior.Color = rgbRed
End Select
End If
Next j
Next i
End With
End Sub