Excel IF函数使用问题:每日生产数据历史记录无法保留
解决Excel中IF函数无法保留历史产量数据的问题
问题根源
你当前的C列公式=IF(B1=1,(Daily Production Cell), C1)存在两个核心问题:
- 循环引用:公式试图引用自身单元格(C1),Excel的计算逻辑无法稳定保留这类引用的历史值。
- 公式动态特性:Excel公式是实时计算的,当
TODAY()更新为次日,B列对应单元格变为0时,C列公式会自动重新计算,直接覆盖之前存储的产量数据,导致历史值丢失。
可行解决方案
方案1:用VBA宏自动记录每日数据
这是最自动化的方式,能在打开文件或指定时机自动将当日产量写入对应C列单元格:
- 按
Alt + F11打开VBA编辑器。 - 在左侧项目窗口找到你的工作簿,右键插入模块。
- 粘贴以下代码(根据实际工作表和单元格地址修改):
Sub RecordDailyProduction() Dim ws As Worksheet Dim targetRow As Integer Dim prodCell As Range Dim dateCol As Range ' 替换为你的工作表名称 Set ws = ThisWorkbook.Worksheets("Sheet1") ' 替换为你的Daily Production Cell地址 Set prodCell = ws.Range("D1") ' 对应9月日期的A列范围 Set dateCol = ws.Range("A1:A30") ' 查找今日日期对应的行号 targetRow = dateCol.Find(What:=Date, LookIn:=xlValues, LookAt:=xlWhole).Row ' 将产量写入对应C列单元格 ws.Range("C" & targetRow).Value = prodCell.Value End Sub
- 可设置工作簿打开自动执行:双击
ThisWorkbook,选择Workbook和Open事件,粘贴Call RecordDailyProduction。
方案2:手动快照+辅助列(无需宏)
如果不想用宏,可通过辅助列配合手动操作实现:
- 新增D列作为「产量快照列」,每天手动将
Daily Production Cell的值复制粘贴为值到D列对应日期的单元格。 - C列公式修改为:
=IF(A1=TODAY(), Daily Production Cell, D1)
非当日的C列会读取D列的手动快照值,不会被动态覆盖。
方案3:Power Query自动追加历史数据
- 将每日产量和对应日期整理成Excel表格(按
Ctrl+T)。 - 用Power Query加载该表格,设置「关闭并上载至」为仅创建连接。
- 每天更新产量后,刷新Power Query连接,它会自动将新数据追加到历史记录表中,不会覆盖旧数据。
内容的提问来源于stack exchange,提问作者Abdul Rahman
相关产品推荐
相关产品推荐

