如何将Excel每日计算值保存至其他单元格以防止被覆盖
保存每日自动计算值的解决方案
方法1:用VBA宏自动记录数据
- 打开Excel文件,按
Alt + F11打开VBA编辑器 - 在左侧工程窗口找到你的工作簿,右键插入模块,粘贴以下代码:
Sub SaveDailyValues() ' 替换成你实际存计算值的单元格位置 Dim val1 As Variant, val2 As Variant val1 = ThisWorkbook.Sheets("Sheet1").Range("A1").Value val2 = ThisWorkbook.Sheets("Sheet1").Range("B1").Value ' 指定用来存历史数据的工作表,比如Sheet2 Dim targetSheet As Worksheet Set targetSheet = ThisWorkbook.Sheets("Sheet2") Dim lastRow As Long lastRow = targetSheet.Cells(targetSheet.Rows.Count, "A").End(xlUp).Row + 1 ' 写入日期和计算值 targetSheet.Cells(lastRow, "A").Value = Date targetSheet.Cells(lastRow, "B").Value = val1 targetSheet.Cells(lastRow, "C").Value = val2 ' 自动保存工作簿,避免记录丢失 ThisWorkbook.Save End Sub
- 接着设置打开文件自动触发:在工程窗口双击
ThisWorkbook,左侧下拉选Workbook,右侧下拉选Open,粘贴代码:
Private Sub Workbook_Open() Call SaveDailyValues End Sub
- 最后把文件另存为启用宏的工作簿(.xlsm),之后每次打开文件,计算值和日期会自动追加到Sheet2的新行里。
方法2:Power Query无宏实现自动追加
- 先把存计算值的单元格(比如Sheet1的A1、B1)做成表:选中A1:B1,按
Ctrl + T创建表,命名为DailyCalculations - 新建空白工作表(命名
History),点击「数据」选项卡→「从表格/区域」,进入Power Query编辑器 - 点击「添加列」→「自定义列」,输入公式
=Date.From(DateTime.LocalNow()),列名设为记录日期 - 关闭编辑器时选择「仅创建连接」,右键这个连接→「属性」,勾选「打开文件时刷新数据」
- 回到
History工作表,点击「数据」→「追加查询」→「追加查询作为新查询」,选择DailyCalculations和历史连接,合并后上载到History表。之后每次打开文件刷新,新计算值会自动追加到历史记录。
注意事项
- VBA方案需要Excel启用宏,首次打开要允许启用内容
- Power Query方案不需要宏,适合禁用宏的环境,只需一次设置规则
内容的提问来源于stack exchange,提问作者gfsadmin
相关产品推荐
相关产品推荐

