表白网站制作源码,长治网站开发,计算机网站开发图片,电子商务网站开发原则实例需求#xff1a;数据总行数不确定#xff0c;现需要将Category区域#xff08;即C列到J列#xff09;中第3行开始的区域设置条件格式#xff0c;规则如下#xff1a;
只对部分指定单元格应用色阶条件格式#xff08;3色#xff09;指定单元格应满足条件#xff1…实例需求数据总行数不确定现需要将Category区域即C列到J列中第3行开始的区域设置条件格式规则如下
只对部分指定单元格应用色阶条件格式3色指定单元格应满足条件该行B列0.5等于该列第2行的值Category例如对于第6行B60.5值为3对应Category为3的列为E列因此E6单元格应用色阶条件格式该行其他单元格无填充色
效果如下所示。 首先想到的实现思路可能是根据B列的值定位每行需要设置色阶的单元格使用Union组合为一个Range对象然后设置色阶条件格式这种方式可以实现但是如果用户修改了B列数据那么需要重现运行代码才能获取正确的条件格式。
下面用另外一种更通用的方法来实现这个需求为整个数据区域创建两个条件格式规则
第一个规则筛选无需应用色阶条件格式的单元格设置格式为无格式并且启用“如果为真则停止”避免受第二个规则的影响第二个规则应用色阶条件格式
示例代码如下。
Sub HeatMapColorScale()Dim objSht As WorksheetDim rngData As RangeDim lastRow As Long, i As LongDim objFC As FormatConditionSet objSht ThisWorkbook.Sheets(CSDN)With objSht.CellsFor i .FormatConditions.Count To 1 Step -1.FormatConditions(i).DeleteNextEnd WithlastRow objSht.Cells(objSht.Rows.Count, A).End(xlUp).RowSet rngData objSht.Range(C3:I lastRow)With rngData.FormatConditions.Add Type:xlExpression, Formula1:NOT($B30.5C$2).Item(1).StopIfTrue True.AddColorScale ColorScaleType:3End With
End Sub【代码解析】 第6行代码获取工作表对象。 第7~10行代码循环遍历删除工作表中的全部条件格式删除对象时应使用倒序循环否则可能会出现遗漏或者运行时错误。 第12行代码获取最后数据行的行号。 第15行代码添加条件格式使得无关单元格不会被填充颜色。 第16行代码设置“如果为真则停止”即后续条件格式不再有效。 第17行代码添加色阶条件格式。
运行代码创建的条件格式如下所示。 扩展知识
如果工作表中已经存在条件格式例如本示例中的色阶使用代码添加添加新的条件格式新规则将被添加至原规则之下那么可以使用如下代码调整规则次序。 With rngData.FormatConditions.Add Type:xlExpression, Formula1:NOT($B30.5C$2)End WithrngData.FormatConditions(rngData.FormatConditions.Count).SetFirstPriorityrngData.FormatConditions(1).StopIfTrue True微软文档: FormatCondition.StopIfTrue property (Excel) FormatCondition.SetFirstPriority method (Excel) Range.FormatConditions property (Excel)