ARTICLE · 1351284
Excel 合同到期提醒自动变色:自定义格式与 TODAY 函数
合同一多,续签日期全靠脑子记,早晚要出事。其实表格自己会报警——到期前显示蓝色提示,过了期变绿,正好是今天变红,打开文件一眼就能看出哪几份该处理了。
整个做法只用到两个东西:自定义单元格格式负责“长什么样”,TODAY 函数负责“差多少天”。两步就能搭完。
先看一眼基础台账,四列结构:姓名、签订日期、合同年限、到期日期,最后留一列空的“剩余天数”。

第一步:先把空列的“显示格式”定好
框选“剩余天数”这一列的数据区域(从第一个空单元格拉到最后一个),然后在选中的区域上右键,点“设置单元格格式”。

弹出的对话框里,切到“数字”选项卡,左侧分类选“自定义”,然后在右侧的“类型”输入框里填这一串:
[蓝色]0天后到期;[绿色]已逾期0天;[红色]今天到期填完点确定,此时单元格还是空的,什么都不会显示——正常,格式已经埋进去了,等第二步填进数字才会生效。
这串代码在干什么
它其实是一个三段式格式,用分号隔开,按顺序对应“正数;负数;零”三种情况:
[蓝色]0天后到期 | ||
[绿色]已逾期0天 | ||
[红色]今天到期 |
关键在于那个 0:它是数字占位符,会把实际数值填进来。而负数段里的 0 显示出来是绝对值——所以算出来是 −240 时,屏幕上写的是「已逾期240天」,不会出现那个别扭的负号。加一个“已”字就足够表达方向了,负号反而多余。
方括号里的颜色名会改变这一段的文字颜色,蓝、绿、红都是内置的,可以按自己的习惯换。视频里用的是绿标逾期,你要是觉得逾期该用红色警示,把两段的颜色名对调就行。
第二步:填公式,让天数自己算
在“剩余天数”列的第一个空白单元格(E2)输入:
=D2-TODAY()D2 是这一行的到期日期,TODAY() 返回当天的日期,两者相减得到的就是剩余天数。

输入过程中界面会自动提示 TODAY 函数,不用管,直接回车。第一格立刻显示出结果。
然后把鼠标移到这个单元格的右下角,光标变成黑色十字时双击——公式会自动往下填充到最后一行数据。

整列的提示就出来了。到期还早的是蓝色「590天后到期」,已经过期的是绿色「已逾期240天」,当天到期的三条齐齐显示红色「今天到期」。
为什么第二天打开会自动变
这一点是很多人没搞明白的地方:不是格式在动,是 TODAY() 在动。
TODAY() 属于易失性函数,每次打开文件、或者表格重新计算时,它都会返回当时的日期,所以每一行的差值都会跟着变一天。你不用手动刷新,也不用改任何设置。
也就是说,这套东西做好一次,往后长期有效。哪怕这个文件放上一年,再打开时颜色和天数也都是准的。
几个容易踩的坑
到期日期必须是真日期。 如果 D 列是从别处粘贴来的文本,长得像日期但实际上不能参与运算,减出来会报 #VALUE!。判断方法很简单:选中那一列,看默认对齐方式——真日期靠右对齐,文本靠左。
公式里别用 TODAY 后面的括号漏掉。TODAY 不带括号会被当成名字,直接报错。
不要用“固定日期”代替 TODAY()。 有人图省事写成 =D2-DATE(2026,11,13),那这个表第二天就失效了,因为它算的是和某一固定日期的差。
筛选和排序都不受影响。 因为格式是绑在单元格上的,跟着行走。但如果你在数据中间插入新行,记得把上一行的公式复制下来,新行不会自动继承。
换成别的场景一样能用
这套模板不只适用于合同。把 D 列换成任何“有一个截止时间”的字段就行:
项目节点:填计划完成日期,逾期标绿、临近标蓝 员工生日:填生日,改成「[蓝色]0天后生日;[红色]今天生日」这类措辞 证件年审:营业执照、资质证书的到期日,同样逻辑 设备保养:下次保养日期,一眼锁定超期设备
唯一需要调整的是自定义格式里的那段中文——把“到期”换成“生日”“保养”之类的词就可以,代码结构一点不用动。
小结
两步:先设 [蓝色]0天后到期;[绿色]已逾期0天;[红色]今天到期 这个三段式格式,再输 =D2-TODAY() 往下填充。
视频演示用的是 WPS 表格,Excel 里的路径完全一致——右键菜单同样有“设置单元格格式”,也可以直接按 Ctrl+1 调出那个对话框,比右键更快。















































































