如何根据另一单元格值仅单次写入当前时间到Excel单元格(免宏适配Teams)
解决方案
前置说明
你之前尝试的两个公式失效原因:
=IF(F7="Yes";NOW();"")中的NOW()是易失性函数,每次工作表触发计算时都会自动更新值,无法固定首次写入的时间=IF(AND(F7="Yes";ISBLANK(J7));NOW();"")直接引用公式所在的J列单元格,Excel默认关闭迭代计算时会判定为循环引用报错
方案1:通用兼容方案(支持所有Excel版本+Teams共享)
这个方案操作最简单,适配性最强,是首选方案:
- 先开启迭代计算设置:
- 打开文件后点击左上角「文件」→「选项」→「公式」
- 勾选「启用迭代计算」,将「最多迭代次数」设置为
1,点击确定保存
- J列统一写入公式(如果你的Excel分隔符是分号就把逗号替换为分号):
=IF(AND(F7="Yes",ISBLANK(J7)),NOW(),IF(F7<>"Yes","",J7)) - 选中J列所有单元格,右键设置单元格格式为自定义,格式填入
DD/HH/MM hh:mm:ss,和你之前VBA输出的格式完全一致
效果说明
- F列第一次改为"Yes"时,J列会自动写入当前时间,之后无论工作表怎么刷新,只要F列保持"Yes",J列的时间不会变动
- F列改为非"Yes"值时,J列自动清空,下次再改为"Yes"会重新记录最新的修改时间
- 文件保存后共享到Teams,不管是网页端还是桌面端打开都可以正常生效,所有协作者不需要重复设置迭代计算
方案2:Excel 365/2021专属方案(无需开启迭代计算)
如果所有协作者都使用Excel 365/2021及以上版本,可以用自定义LAMBDA函数实现,不需要修改迭代计算设置:
- 点击顶部菜单栏「公式」→「定义名称」
- 按以下参数填写:
- 名称:
固定时间 - 范围:选择你要生效的工作表
- 引用位置:
=LAMBDA(触发值,IF(触发值="Yes",IF(@OFFSET(INDIRECT("RC",FALSE),0,1)="",NOW(),@OFFSET(INDIRECT("RC",FALSE),0,1)),""))
点击确定保存
- 名称:
- J列统一写入公式:
=固定时间(F7) - 同样设置J列的自定义时间格式即可
内容的提问来源于stack exchange,提问作者adrisiadrice
相关产品推荐
相关产品推荐

