VBA处理工作表合并单元格 - 格式篇

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/taller_2000/article/details/79407380

前言

Excel合并单元格是有人爱有人恨的功能,一般来说数据分析师都非常憎恨这个功能,因为合并单元格常常闹幺蛾子,导致数据统计和格式化障碍重重。


格式篇

对于普通的规整数据,如果需要设置成间隔填充颜色,可以说是so easy。功能区中点几下鼠标(开始>>套用表格格式),选中自己喜欢的表格样式,瞬间完成这个任务。
如果数据表是有合并单元格的,套用表格格式,杯具了… …,合并单元格都不见了,欲哭无泪呀!

领导就要用这样的合并单元格,你就忍了吧。只要学会MergeCellsMergeArea属性,VBA代码立即搞定合并单元格格式。

Sub FormatMergedArea()
    Dim c As Range, bFlag, rng
    Columns(1).Interior.Color = xlNone
    lst = Cells(Rows.Count, 1).End(xlUp).Row
    For i = 1 To lst
        Set c = Cells(i, 1)
        If c.MergeCells Then
            Set c = c.MergeArea
            i = i + c.Cells.Count - 1
        End If
        If Not bFlag Then c.Interior.Color = vbYellow
        bFlag = Not bFlag
    Next
End Sub

首先清除第1列的单元格底色,然后循环处理有A列中的有数据的单元格。如果单元格属于某个合并单元格,那么MergeCells属性返回值为True,对于合并区域中的任何一个单元格,都可以使用Range(..).MergeArea.Address返回整个合并区域的引用地址。在示例代码,使用Cells.Count进而获取当前合并区域单元格数量。
设置间隔色时,对于连续单元格区域,通常会根据行号的奇偶来决定是否设置填充色,但是对于不规则合并区域,这中判断方式,已经不再适合。代码中使用了一个逻辑变量,作为是否设置当前单元格格式的标志位,每次循环时bFlag = Not bFlag实现标志位反转,以实现隔行填充的效果。

猜你喜欢

转载自blog.csdn.net/taller_2000/article/details/79407380
今日推荐