在我的Excel工作表中,我需要在特定范围内应用替代颜色,这些颜色始终在A5中开始并在X列中结束,但每次运行报表时行数都会更改。
在第一个范围的末尾,我需要向下移动2行并将交替的行颜色应用到4行。
我在stackoverflow上找到了以下代码,但到目前为止我只能获得要突出显示的行A5。
Sub AlternateRowColors()
Dim LastRow As Long
'LastRow = Range("A1").End(xlDown) 'Row From original code
'Find the last used row in a Column: column A in this example
'Dim LastRow As Long
With ActiveSheet
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
For Each Cell In Range("A5:x" & LastRow) ''change range accordingly
If Cell.Row Mod 2 = 1 Then ''highlights row 2,4,6 etc|= 0 highlights 1,3,5
Cell.Interior.ColorIndex = 15 ''color to preference
Else
Cell.Interior.ColorIndex = xlNone ''color to preference or remove
End If
Next Cell
End Sub
我一直试图解决这个问题两天,任何帮助将不胜感激。
答案 0 :(得分:1)
我不确定我是否完全理解你的问题,但它听起来就好像它与一个不准确的LastRow有关。请尝试使用此方法。我已经注释掉了你当前的LastRow方法并输入了一个新方法。如果您想要工作表中的绝对最后一行,无论哪一列包含最后一项数据,那么这将对您有所帮助:
Sub AlternateRowColors()
Dim LastRow As Long
With ActiveSheet
'LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
LastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End With
For Each Cell In Range("A5:x" & LastRow) ''change range accordingly
If Cell.Row Mod 2 = 1 Then ''highlights row 2,4,6 etc|= 0 highlights 1,3,5
Cell.Interior.ColorIndex = 15 ''color to preference
Else
Cell.Interior.ColorIndex = xlNone ''color to preference or remove
End If
Next Cell
End Sub
其他编辑:您询问是否在LastRow之前停止突出显示8行。我们可以在建立之后更改LastRow的值。只需在代码中间添加以下两行(在End With之后,在For Each循环之前):
LastRow = LastRow - 8
If LastRow < 5 Then LastRow = 5
第一行更改LastRow变量;第二行检查LastRow值现在是否小于我们预期的起始行(第5行)。如果它更小,则将其更改为5,因为5是最小值(从第5行开始,在第5行或更高版本结束)。
附加编辑2:你说“LastRow”下面的行是一个合并的行,不会突出显示,但接下来的4行将有不同的突出显示颜色...试试下面的代码。主要的补充是代码的最后一行,它为单个范围着色,如您所描述的四行。但是要使用这行代码,我必须引用真正的LastRow,所以我不得不改变脚本的中间位置 - 它现在创建一个新的'LastRowNew',用于着色备用行,就像之前一样。 / p>
希望这就是你现在所需要的;但如果你的需要不确切,你应该能够根据自己的要求进行调整。希望这有帮助!
Sub AlternateRowColors()
Dim LastRow As Long
With ActiveSheet
'LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
LastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
End With
LastRowNew = LastRow - 8
If LastRowNew < 5 Then LastRowNew = 5
For Each Cell In Range("A5:x" & LastRowNew) ''change range accordingly
If Cell.Row Mod 2 = 1 Then ''highlights row 2,4,6 etc|= 0 highlights 1,3,5
Cell.Interior.ColorIndex = 15 ''color to preference
Else
Cell.Interior.ColorIndex = xlNone ''color to preference or remove
End If
Next Cell
Range("A" & (LastRow + 2), Range("X" & (LastRow + 5))).Interior.ColorIndex = 45
End Sub