VBA根据其他列值对行进行着色

时间:2014-07-13 12:07:54

标签: excel vba excel-vba

我正在尝试根据COL B,C,D的行颜色为A列中的每一行着色。

说A2颜色基于B2,C2,D2的颜色。如果它们中的任何一个为红色,则A2应为红色,否则A2为绿色

请在下面找到我的代码:

Option Explicit

Sub Sheet1()

Dim lastR As Long
Dim i As Long

lastR = Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row

For i = lastR To 2 Step -1

    If ((Sheets("Sheet1").Cells(i, "B")) Or (Sheets("Sheet1").Cells(i, "C")) Or (Sheets("Sheet1").Cells(i, "D"))) = Rows(i).Interior.Color = RGB(255, 0, 0) Then
        Rows(i).Interior.Color = RGB(0, 255, 0)
    End If

Next i

End Sub

我的下标超出范围,错误代码为9。

这是我的Excel屏幕打印:

  

enter image description here

3 个答案:

答案 0 :(得分:0)

试试这个:

Sub Sheet1()
    Dim rng As Range, cl As Range

    For Each cl In Worksheets("Sheet1").Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row)
        If cl.Offset(0, 1).Interior.Color = 255 Or cl.Offset(0, 2).Interior.Color = 255 Or cl.Offset(0, 3).Interior.Color = 255 Then
            cl.Interior.Color = 255
        End If
    Next cl
End Sub

答案 1 :(得分:0)

我认为问题出在lastR = Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row

Sheets("Sheet1").Cells(Rows.Count, "A")会找到最后一个单元格,然后.End(xlUp)会将选择再次带到第一行。

当你说For i = lastR To 2 Step -1时,你可能想要从第一行到第二行,步长为-1。这是不可能的。

答案 2 :(得分:-1)

将您的单元格引用更改为如下所示(B列的示例):

Cells(i, 2)

如果您使用Range(),您可以使用您尝试过的样式进行操作,但是您需要将值连接到“A1”样式的单元格引用中,如下所示:

Range("B" & i)