VBA-基于数据值的高级宏更改单元格的颜色

时间:2019-01-08 10:17:28

标签: excel vba

我正在尝试编写一个代码,该代码根据先前定义的值(日期)更改指定区域中单元格的颜色。因此,如果定义的日期减去实际日期小于零,则单元格内部颜色将变为红色。

我正在从区域中提取数据:从第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”功能,但失败了。

1 个答案:

答案 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