You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现表格中日期超30天时自动更新对应状态列的状态值

如何实现表格中日期超30天时自动更新对应状态列的状态值

嘿,这个需求其实挺常见的,我给你整理了Excel和Google Sheets两种常用工具的解决方案,你可以按需选用:

Excel 解决方案

1. 动态显示状态(不修改原始数据)

如果你的原始状态信息可以放在另一列(比如C列,A列用来显示最终状态),B列是日期,那可以用嵌套IF公式实现实时更新:
在A2单元格输入以下公式,然后下拉填充到所有行:
=IF(AND(C2="Ongoing", TODAY()-B2>30), "Alert", C2)
这个公式的逻辑是:如果C列的原始状态是「Ongoing」,且当前日期和B列日期的间隔超过30天,A列就显示「Alert」;其他情况都保留C列的原始状态。

如果你的需求是不管原状态是什么,只要日期超30天就改成Alert,那把公式简化成:
=IF(TODAY()-B2>30, "Alert", C2)

2. 自动修改单元格值(用VBA宏)

如果你需要直接修改A列的现有状态值,而不是用公式显示结果,可以用VBA宏来实现:

  1. 按Alt+F11打开VBA编辑器;
  2. 右键点击左侧的工作簿名称,选择「插入」->「模块」;
  3. 粘贴以下代码:
Sub UpdateStatus()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    
    ' 指定要操作的工作表,把"Sheet1"改成你的表名
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ' 获取B列最后一行的行号
    lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
    
    ' 从第二行开始遍历(假设第一行是表头)
    For i = 2 To lastRow
        ' 判断:如果A列是Ongoing,且日期间隔超30天,就改成Alert
        If ws.Cells(i, "A").Value = "Ongoing" And DateDiff("d", ws.Cells(i, "B").Value, Date) > 30 Then
            ws.Cells(i, "A").Value = "Alert"
        End If
    Next i
End Sub
  1. 回到Excel界面,按Alt+F8选择UpdateStatus宏运行,就能批量更新状态了。
    如果你想让它自动定时运行,可以设置工作簿打开时触发,或者用Windows任务计划配合宏实现每日自动执行。

Google Sheets 解决方案

1. 动态显示状态(公式法)

和Excel的逻辑类似,假设原始状态在C列,B列是日期,在A2输入公式后下拉:
=IF(AND(C2="Ongoing", TODAY()-B2>30), "Alert", C2)
同样,要是不管原状态只要超30天就改Alert,简化公式为:
=IF(TODAY()-B2>30, "Alert", C2)

2. 自动修改单元格值(用Apps Script)

如果需要直接修改A列的现有值,可以用Google的脚本工具:

  1. 打开你的表格,点击顶部「扩展程序」->「Apps脚本」;
  2. 清空默认代码,粘贴以下脚本:
function updateStatus() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const data = sheet.getDataRange().getValues();
  
  // 从第二行开始遍历(第一行是表头,数组索引从1开始)
  for (let i = 1; i < data.length; i++) {
    const currentStatus = data[i][0]; // A列对应数组索引0
    const targetDate = data[i][1]; // B列对应数组索引1
    // 计算日期间隔(取整数天数)
    const daysDiff = Math.floor((new Date() - new Date(targetDate)) / (1000 * 60 * 60 * 24));
    
    // 判断条件:状态是Ongoing且间隔超30天,修改为Alert
    if (currentStatus === "Ongoing" && daysDiff > 30) {
      sheet.getRange(i + 1, 1).setValue("Alert"); // i+1是实际行号,1是A列
    }
  }
}
  1. 点击工具栏的运行按钮,首次运行会需要授权,按照提示完成即可;
  2. 要是想每天自动更新,点击左侧「触发器」图标,添加一个时间驱动的触发器,选择每天运行一次就行。

备注:内容来源于stack exchange,提问作者Eni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 15:53:09