Excel VBA 按B列奇偶分组为A列对应行设置多组单元格填充色
修正后可直接使用的VBA代码
Sub 按B列值填充A列颜色() Dim ws As Worksheet Dim lastRow As Long Dim cell As Range Dim i As Integer ' 各颜色计数变量,不需要统计可以删除 Dim cntGreen As Long, cntBlue As Long, cntYellow As Long, cntBrown As Long ' 定义颜色常量,可按需修改RGB值 Const 绿色 As Long = vbGreen Const 蓝色 As Long = vbBlue Const 黄色 As Long = vbYellow Const 棕色 As Long = RGB(139, 69, 19) ' 自定义棕色,无内置常量 ' 遍历前8个工作表,不足8个则处理所有存在的工作表 For i = 1 To Application.Min(8, ThisWorkbook.Worksheets.Count) Set ws = ThisWorkbook.Worksheets(i) ' 获取当前工作表A列最后一行有数据的行号 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 数据不足5行则跳过当前工作表 If lastRow < 5 Then GoTo NextWorksheet ' 遍历B列第5行到最后一行的所有单元格 For Each cell In ws.Range("B5:B" & lastRow) ' 先判断B列值的奇偶性 If WorksheetFunction.IsEven(cell.Value) Then ' 偶数:判断是否为奇数+1(即分组序号为4、6、8这类) If (cell.Value / 2) Mod 2 = 1 Then ws.Cells(cell.Row, "A").Interior.Color = 棕色 cntBrown = cntBrown + 1 Else ws.Cells(cell.Row, "A").Interior.Color = 蓝色 cntBlue = cntBlue + 1 End If Else ' 奇数:判断是否为偶数+1(即分组序号为3、5、7这类) If ((cell.Value - 1) / 2) Mod 2 = 1 Then ws.Cells(cell.Row, "A").Interior.Color = 黄色 cntYellow = cntYellow + 1 Else ws.Cells(cell.Row, "A").Interior.Color = 绿色 cntGreen = cntGreen + 1 End If End If Next cell NextWorksheet: Next i ' 不需要统计结果可以删除下面这行 MsgBox "填充完成,统计:绿色" & cntGreen & "行,蓝色" & cntBlue & "行,黄色" & cntYellow & "行,棕色" & cntBrown & "行" End Sub
代码说明
- 兼容1-8个工作表的处理需求,自动识别工作表数量,不会出现下标越界错误
- 保留原有代码从第5行开始处理的逻辑,如果数据起始行不是第5行,修改
Range("B5:B")和lastRow < 5的数值即可 - 颜色已按需求匹配,如需调整颜色直接修改开头的颜色常量对应的RGB值即可
- 处理时会自动跳过数据量不足5行的空工作表,不会报错
- 保留了原代码的计数统计功能,不需要的话可以删除对应变量和最后的弹窗代码
内容的提问来源于stack exchange,提问作者user14909564
相关产品推荐
相关产品推荐

