不使用VBA实现Excel单元格值固定:当日匹配时C2仅更新一次
实现Excel单元格仅在指定日期时单次更新值的方法
你需要实现的是:当系统日期等于A2单元格的日期时,C2单元格仅从B2获取一次值,后续即使B2修改,C2也保持不变。之前用的公式=IF(TODAY()=A2; B2; C2)没法满足需求——因为Excel公式默认会动态重算,只要当前日期还等于A2,每次工作表刷新(比如打开文件、改其他单元格)C2都会跟着B2变,锁不住第一次的取值。
下面给你两种可行的解决办法:
方法一:启用迭代计算配合公式
- 打开Excel选项,切换到「公式」标签,勾选「启用迭代计算」,把「最多迭代次数」设为1次。
- 在C2输入公式:
=IF(AND(TODAY()=A2; C2=""); B2; C2)
这个公式的逻辑是:只有当今天等于A2且C2是空的时,才会从B2取值;一旦C2有了值,不管B2怎么改,C2都保持原样,完美实现“仅更新一次”的需求。
- 在C2输入公式:
方法二:用VBA宏自动锁定值
如果不想开迭代计算,用VBA宏更稳妥:
- 右键点击工作表标签(比如Sheet1),选「查看代码」,在弹出的VBA编辑器里粘贴这段代码:
Private Sub Worksheet_Change(ByVal Target As Range) ' 监控B2的变化,同时检查日期是否匹配 If Not Intersect(Target, Range("B2")) Is Nothing And Date = Range("A2").Value Then ' 只有C2为空时才更新 If Range("C2").Value = "" Then Range("C2").Value = Range("B2").Value End If End If End Sub
这段代码会在B2被修改时自动触发:如果当前日期等于A2的日期,且C2还没值,就把B2的值写入C2;之后再改B2,C2也不会变了。
要是你需要批量处理多行数据(比如A、B列有多个日期和对应值),只要把代码里的单元格范围改成对应区域就行,逻辑完全一致。
内容的提问来源于stack exchange,提问作者Boyka Kirov
相关产品推荐
相关产品推荐

