如何在Google Sheets中实现:当日期单元格早于今日且目标单元格为空时将其标红
在Google Sheets中实现日期过期且单元格为空时标红的方案
嘿,这个需求用Google Sheets的条件格式就能轻松搞定,完全不需要写脚本!当然如果之后有更复杂的扩展需求,我也给你准备了Apps Script的方案,一步步来:
方法一:条件格式(推荐,简单高效)
这是最直接的方式,实时生效,每天打开表格都会自动判断:
- 选中你要应用格式的范围(比如整个B列,或者
B1:B100这样的具体行范围) - 点击顶部菜单栏的「格式」→「条件格式」
- 在右侧弹出的面板里,找到「格式规则」,选择「自定义公式」
- 在公式输入框里粘贴这个公式:
👉 解释下公式:=AND(A1<TODAY(), ISBLANK(B1))AND()用来同时判断两个条件,A1<TODAY()检查A列的日期是否早于当前日期,ISBLANK(B1)检查对应B列单元格是否为空。注意如果你的选中范围是从B2开始的,公式要改成A2,保持行号对应就行。 - 点击「格式样式」,把填充颜色设置为红色,最后点击「完成」就搞定了!
方法二:Apps Script(适合复杂场景)
如果之后你需要更灵活的逻辑(比如批量处理多个工作表、定时自动执行等),可以用Google Sheets自带的Apps Script(替代VBA的工具):
- 打开你的表格,点击顶部「扩展程序」→「Apps Script」
- 删除编辑器里默认的代码,粘贴下面的脚本:
function highlightExpiredEmptyCells() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const range = sheet.getDataRange(); const values = range.getValues(); const today = new Date(); today.setHours(0, 0, 0, 0); // 重置时间部分,避免日期带时间导致判断误差 // 遍历每一行数据 for (let i = 0; i < values.length; i++) { const dateCell = values[i][0]; // 获取当前行A列的日期 const valueCell = values[i][1]; // 获取当前行B列的值 const targetCell = sheet.getRange(i + 1, 2); // 定位到当前行B列单元格 // 判断条件:是有效日期、早于今天、且B单元格为空 if (dateCell instanceof Date && dateCell < today && valueCell === "") { targetCell.setBackground("#ff0000"); // 设置红色填充 } else { targetCell.setBackground(null); // 不符合条件时清除颜色 } } } - 点击编辑器顶部的运行按钮,第一次运行需要授权权限,按照提示操作就行。
- 如果你想让脚本自动执行(比如每天凌晨检查一次),可以设置时间驱动触发器:点击编辑器左侧的「触发器」图标,添加触发器,选择函数
highlightExpiredEmptyCells,触发事件选「时间驱动」,设置你需要的频率(比如每天)。
一般来说,方法一完全能满足你的需求,简单又省心~
内容的提问来源于stack exchange,提问作者Khaled Ha
相关产品推荐
相关产品推荐

