如何获取条件格式单元格颜色并判断整行是否全部为绿色
解决方案
方案一:避免读取颜色(更稳定,优先推荐)
你完全不需要通过读取单元格颜色实现需求,只需要增加一行辅助区域存储每列对应的FLAG值,即可用单个公式完成整行判断,避免重复写8次逻辑:
- 首先在数据上方新增一行(比如第4行),在对应数据列的位置填写该列的FLAG取值,比如B4为B列的FLAG、C4为C列的FLAG,以此类推
- 如果你使用的是Excel 365/2021及以上版本,在要输出判断结果的单元格输入如下公式即可(示例为判断第5行,数据列范围是B到H列,可自行调整):
=AND(BYCOL(B$5:H$33,LAMBDA(col,LET(avg,AVERAGE(col),stdev,STDEV.S(col),flag,INDEX(B$4:H$4,COLUMN(col)-COLUMN(B$4)+1),curr,INDEX(col,ROW()-ROW(B$5)+1),AND(curr>=avg-flag*stdev,curr<=avg+flag*stdev))))) - 如果是低版本Excel,可以先写一个通用的自定义函数封装判断逻辑,调用时仅需传入单元格和对应FLAG值即可,重复调用8次也比写全量公式出错概率低很多。
方案二:读取条件格式的单元格颜色
如果确实需要直接读取条件格式生成的填充色,可以使用VBA的DisplayFormat属性实现,步骤如下:
- 按
Alt+F11打开VBA编辑器,插入模块,粘贴如下代码:
Function IsConditionalGreen(rng As Range) As Boolean ' 请修改下方RGB值为你条件格式设置的绿色对应的实际RGB参数 Const TARGET_R = 0 Const TARGET_G = 255 Const TARGET_B = 0 IsConditionalGreen = (rng.DisplayFormat.Interior.Color = RGB(TARGET_R, TARGET_G, TARGET_B)) End Function
- 保存文件为
.xlsm启用宏的格式 - 在判断单元格输入公式即可(示例为判断第5行B到H列):
=AND(IsConditionalGreen(B5),IsConditionalGreen(C5),IsConditionalGreen(D5),IsConditionalGreen(E5),IsConditionalGreen(F5),IsConditionalGreen(G5),IsConditionalGreen(H5))
注意:该方法存在两个局限性:一是修改数据后不会自动重算,需手动按
Ctrl+Alt+F9刷新结果;二是如果后续调整了条件格式的绿色色值,需要同步修改VBA代码中的RGB参数,否则会判断错误。
内容的提问来源于stack exchange,提问作者Jesh Kundem
相关产品推荐
相关产品推荐

