如何根据列标题包含的字段为对应列区域设置差异化颜色格式
需求实现结论
该需求完全可以实现,以下提供两种常用的实现方案,你可以根据自己的使用场景选择。
方案1:条件格式(无需写代码,操作简单)
操作步骤如下:
- 先选中所有需要设置填充色的数据区域(注意排除表头行)
- 在「开始」选项卡找到「条件格式」,选择「新建规则」,规则类型选「使用公式确定要设置格式的单元格」
- 针对
St_1匹配规则,输入公式:
点击「格式」按钮,设置你需要的填充色后确认规则=ISNUMBER(SEARCH("St_1",INDEX($1:$1,COLUMN()))) - 重复新建规则的步骤,针对
St_2匹配规则输入公式:
设置另一种区分度的填充色后确认即可=ISNUMBER(SEARCH("St_2",INDEX($1:$1,COLUMN())))
说明:以上公式默认你的表头在第1行,如果表头在其他行,把公式里的
$1:$1改成对应表头行即可;SEARCH函数不区分大小写,如果需要严格匹配大小写,把SEARCH替换为FIND函数即可。
方案2:VBA脚本(适合频繁重复操作的场景)
按Alt+F11打开VBA编辑器,插入新模块,把以下代码粘贴进去,修改对应参数后运行即可:
Sub SetColFillByHeader() Dim ws As Worksheet Dim headerCell As Range Dim lastRow As Long, lastCol As Long ' 替换成你实际操作的工作表名称 Set ws = ThisWorkbook.Worksheets("Sheet1") ' 以下参数默认表头在第1行,数据从第2行开始,可按需修改 Const HEADER_ROW As Long = 1 Const DATA_START_ROW As Long = 2 ' 获取当前表已使用的最大列、最大行号 lastCol = ws.Cells(HEADER_ROW, ws.Columns.Count).End(xlToLeft).Column lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' 遍历所有表头单元格 For Each headerCell In ws.Range(ws.Cells(HEADER_ROW, 1), ws.Cells(HEADER_ROW, lastCol)) With headerCell ' 匹配含St_1的列,设置填充色 If InStr(1, .Value, "St_1", vbTextCompare) > 0 Then ws.Range(ws.Cells(DATA_START_ROW, .Column), ws.Cells(lastRow, .Column)).Interior.Color = RGB(255, 242, 204) ' 浅橙色,可修改RGB值调整颜色 ' 匹配含St_2的列,设置填充色 ElseIf InStr(1, .Value, "St_2", vbTextCompare) > 0 Then ws.Range(ws.Cells(DATA_START_ROW, .Column), ws.Cells(lastRow, .Column)).Interior.Color = RGB(226, 239, 218) ' 浅绿色,可修改RGB值调整颜色 End If End With Next headerCell End Sub
- 代码里的RGB颜色值可以根据你的需求自行修改
- 运行宏之前建议先备份文件,避免误操作无法回退
内容的提问来源于stack exchange,提问作者Erik Westbrandt
相关产品推荐
相关产品推荐

