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

时间:2018-01-11 16:13:12

标签: excel excel-vba 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

表格如下:

enter image description here

应该是这样的:

enter image description here

提前谢谢!

2 个答案:

答案 0 :(得分:5)

我相信你正在寻找类似的东西。

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

我们可以Resize MergeArea而不是单元格值本身。

如果有合并的单元格,则会将该区域考虑在内 - 如果没有,则表示不会。

然后,将潜在的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

结果:

Results

修改

这是您的代码更新。

我还清理了以前的代码。

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

评论说明:

cf = Not cf只是以下的快捷方式:

If cf = True Then
    cf = False
Else
    cf = True
End If

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

cf = Not False = True

cf = Not True = False

我希望这个解释是足够的:)

这样做的原因是我们不能MOD行,因为它可能会因变量而发生变化。

答案 1 :(得分:2)

Dim Zeile As Double
Dim WhiteColor As Boolean
WhiteColor = False

Dim RangeSize As Byte

Range("A1").Select
Selection.SpecialCells(xlCellTypeLastCell).Select
Zeile = ActiveCell.Row

Range("A1").Select

Do Until ActiveCell.Row = Zeile + 1
    RangeSize = Selection.Count

    If WhiteColor = False Then
        Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row + RangeSize - 1, 8)).Interior.Color = RGB(191, 191, 191)
        WhiteColor = True
    Else
        Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row + RangeSize - 1, 8)).Interior.Color = vbWhite
        WhiteColor = False
    End If
    ActiveCell.Offset(1, 0).Select
Loop

我尝试了上面的代码,它对我有用:

enter image description here