VBA条件格式设置求助:日期超14天且U列为No时标红
解决Excel VBA条件格式未关联U列内容的问题
直接修正后的代码如下:
Sub SetOverdueFormat() Dim Overdue As Range Set Overdue = Worksheets("Progress").Range("X3:X3000") Overdue.FormatConditions.Delete ' 添加同时满足日期超14天、单元格非空、对应U列为"No"的条件规则 Overdue.FormatConditions.Add Type:=xlExpression, Formula1:="=AND(NOT(ISBLANK($X3)), NOW()-X3>14, $U3=""No"")" ' 设置单元格背景为红色 Overdue.FormatConditions(1).Interior.Color = 13551615 End Sub
关键修改说明
- 核心是更新了条件格式的公式,通过
AND函数新增$U3=""No""的判断,确保只有对应行U列内容为"No"时,才会触发标红规则 - 公式中使用
$U3(列绝对引用、行相对引用),保证规则应用到X列每一行时,都会匹配对应行的U列内容 - 原代码缺少U列判断逻辑,导致无论U列是"Yes"还是"No",只要日期超14天就会标红,现在的公式完美解决了这个问题
额外建议
因为你提到复制数据会清除普通条件格式,建议把这个宏绑定到工作表的Worksheet_Change事件中,每次数据更新时自动重新应用格式:
Private Sub Worksheet_Change(ByVal Target As Range) ' 仅当修改的单元格在X3:X3000或U3:U3000范围内时,重新应用格式 If Not Intersect(Target, Me.Range("X3:X3000,U3:U3000")) Is Nothing Then SetOverdueFormat End If End Sub
把这段代码放在"Progress"工作表的代码模块中,就能自动维护条件格式了。
内容的提问来源于stack exchange,提问作者Jeremy
相关产品推荐
相关产品推荐

