在表格中每隔一行着色一次

DaZ*_*aZn 5 excel vba excel-vba

我有一个包含一些合并单元格的表格,我希望通过VBA代码从第一行开始为每一行着色.

多数民众赞成我是如何尝试的:

Sub test()
    Dim Zeile As Long
    With Tabelle2
        For Zeile = 1 To .UsedRange(Rows.Count).End(xlUp).Row Step 2
         .Range(.Cells(Zeile, 1),.Cells(Zeile,8)).Interior.ColorIndex= 15
        Next
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

该表如下所示:

在此输入图像描述

应该是这样的:

在此输入图像描述

先感谢您!

use*_*820 6

我相信你正在寻找这样的东西.

我们添加一个布尔标志,以便我们可以使用它来回翻转(cf).

我们可以ResizeMergeArea,而不是细胞值本身.

如果有合并的单元格,则会考虑该区域 - 如果没有,则不会.

然后,将潜在的MergeArea细胞计数添加到行计数器(Zeile).

Sub ColorEveryOther()
Dim cf As Boolean
Dim Zeile As Long
Dim lr As Long
lr = ActiveSheet.UsedRange.Rows.CountLarge
For Zeile = 1 To lr
    If Not cf Then Range("A" & Zeile).MergeArea.Resize(, 8).Interior.ColorIndex = 15
    Zeile = (Zeile + Range("A" & Zeile).MergeArea.Cells.CountLarge) - 1
    cf = Not cf
Next Zeile
End Sub
Run Code Online (Sandbox Code Playgroud)

结果:

结果

编辑:

这是您的代码更新.

我还清理了以前的代码.

Sub test()
    Dim Zeile As Long
    Dim cf As Boolean
    With Tabelle2
        For Zeile = 1 To .UsedRange(Rows.Count).End(xlUp).Row
            If cf = False Then .Cells(Zeile, 1).MergeArea.Resize(, 8).Interior.ColorIndex = 15
            Zeile = (Zeile + .Cells(Zeile, 1).MergeArea.Cells.CountLarge) - 1
            cf = Not cf
        Next
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

评论解释:

cf = Not cf 只是一个捷径:

If cf = True Then
    cf = False
Else
    cf = True
End If
Run Code Online (Sandbox Code Playgroud)

让我们设置cf = False并完成它.

cf = Not False = True

cf = Not True = False

我希望解释是足够的:)

这样做的原因是我们不能只是MODRow,因为它可能会因变量而变化.