使用VBA创建Excel条件格式

本文介绍了一种在Excel中根据B列值动态设置色阶条件格式的方法,当B列某行加0.5等于第2行相应Category列值时,该行对应Category列的单元格应用色阶。通过创建两个条件格式规则,一个用于排除不需要填充色的单元格,另一个用于应用色阶,实现了对数据区域的灵活处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实例需求:数据总行数不确定,现需要将Category区域(即C列到J列)中第3行开始的区域设置条件格式,规则如下:

  • 只对部分指定单元格应用色阶条件格式(3色)
  • 指定单元格应满足条件:该行B列+0.5等于该列第2行的值(Category),例如对于第6行,B6+0.5值为3,对应Category为3的列为E列,因此E6单元格应用色阶条件格式,该行其他单元格无填充色

效果如下所示。

在这里插入图片描述

首先想到的实现思路可能是:根据B列的值定位每行需要设置色阶的单元格,使用Union组合为一个Range对象,然后设置色阶条件格式,这种方式可以实现,但是如果用户修改了B列数据,那么需要重现运行代码才能获取正确的条件格式。

下面用另外一种更通用的方法来实现这个需求,为整个数据区域创建两个条件格式规则

  • 第一个规则筛选无需应用色阶条件格式的单元格,设置格式为无格式,并且启用“如果为真则停止”,避免受第二个规则的影响
  • 第二个规则应用色阶条件格式

示例代码如下。

Sub HeatMapColorScale()
    Dim objSht As Worksheet
    Dim rngData As Range
    Dim lastRow As Long, i As Long
    Dim objFC As FormatCondition
    Set objSht = ThisWorkbook.Sheets("CSDN")
    With objSht.Cells
        For i = .FormatConditions.Count To 1 Step -1
            .FormatConditions(i).Delete
        Next
    End With
    lastRow = objSht.Cells(objSht.Rows.Count, "A").End(xlUp).Row
    Set rngData = objSht.Range("C3:I" & lastRow)
    With rngData.FormatConditions
        .Add Type:=xlExpression, Formula1:="=NOT($B3+0.5=C$2)"
        .Item(1).StopIfTrue = True
        .AddColorScale ColorScaleType:=3
    End With
End Sub

【代码解析】
第6行代码获取工作表对象。
第7~10行代码循环遍历删除工作表中的全部条件格式,删除对象时应使用倒序循环,否则可能会出现遗漏或者运行时错误。
第12行代码获取最后数据行的行号。
第15行代码添加条件格式,使得无关单元格不会被填充颜色。
第16行代码设置“如果为真则停止”,即后续条件格式不再有效。
第17行代码添加色阶条件格式。

运行代码创建的条件格式如下所示。

在这里插入图片描述

扩展知识:

如果工作表中已经存在条件格式(例如本示例中的色阶),使用代码添加添加新的条件格式,新规则将被添加至原规则之下,那么可以使用如下代码调整规则次序。

   With rngData.FormatConditions
       .Add Type:=xlExpression, Formula1:="=NOT($B3+0.5=C$2)"
   End With
   rngData.FormatConditions(rngData.FormatConditions.Count).SetFirstPriority
   rngData.FormatConditions(1).StopIfTrue = True

微软文档:

FormatCondition.StopIfTrue property (Excel)

FormatCondition.SetFirstPriority method (Excel)

Range.FormatConditions property (Excel)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值