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

不使用VBA实现Excel单元格值固定:当日匹配时C2仅更新一次

实现Excel单元格仅在指定日期时单次更新值的方法

你需要实现的是:当系统日期等于A2单元格的日期时,C2单元格仅从B2获取一次值,后续即使B2修改,C2也保持不变。之前用的公式=IF(TODAY()=A2; B2; C2)没法满足需求——因为Excel公式默认会动态重算,只要当前日期还等于A2,每次工作表刷新(比如打开文件、改其他单元格)C2都会跟着B2变,锁不住第一次的取值。

下面给你两种可行的解决办法:

方法一:启用迭代计算配合公式

    1. 打开Excel选项,切换到「公式」标签,勾选「启用迭代计算」,把「最多迭代次数」设为1次。
    1. 在C2输入公式:
      =IF(AND(TODAY()=A2; C2=""); B2; C2)
      这个公式的逻辑是:只有当今天等于A2且C2是空的时,才会从B2取值;一旦C2有了值,不管B2怎么改,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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:52:32