Excel中TODAY()配合IF自动填充日期异常问题咨询
问题原因与解决方案
问题根源
你使用的TODAY()是易失性函数,它的核心特性是:只要工作表触发计算(比如打开文件、编辑任意单元格),就会自动更新为当前系统日期。所以前一天输入买家信息时生成的日期,第二天打开表格就会被替换成当日日期——这和嵌套IF无关,是函数本身的设计逻辑导致的。
解决办法
方法1:用VBA宏自动填充静态日期(推荐)
这是最省心的方案,能在输入买家信息时自动写入固定不变的日期:
- 右键工作表标签(如「Sheet1」),选择「查看代码」
- 在弹出的VBA编辑器中粘贴以下代码:
Private Sub Worksheet_Change(ByVal Target As Range) ' 仅监控B列的单元格修改 If Target.Column = 2 And Target.Value <> "" Then ' 对应A列单元格为空时,写入静态当日日期 If Target.Offset(0, -1).Value = "" Then Target.Offset(0, -1).Value = Date End If End If End Sub - 保存文件时选择「Excel 启用宏的工作簿(*.xlsm)」格式,之后在B列输入买家信息,A列会自动生成固定的当日日期,不会随时间更新。
方法2:手动转换为静态值(无宏方案)
如果不想用宏,可以生成日期后手动转为静态值:
- 在B列输入信息后,A列用
=IF(B24<>"",TODAY(),"")生成当日日期 - 选中A列的日期单元格,按
Ctrl+C复制,右键点击单元格选择「选择性粘贴」→「值」,把公式转换成固定的日期数值,后续就不会再更新。
方法3:迭代计算(不推荐)
这种方法依赖Excel的迭代设置,稳定性较差:
- 点击「文件」→「选项」→「公式」,勾选「启用迭代计算」,把迭代次数设为1
- A列公式改为:
=IF(B24<>"",IF(A24="",TODAY(),A24),"") - 但如果后续修改B列内容,可能会意外触发日期更新,风险较高。
内容的提问来源于stack exchange,提问作者Terry Jensen
相关产品推荐
相关产品推荐

