如何获取多个实时变动单元格的历史最低值
同行单元格历史最低值实现方法
核心逻辑非常直接:让第4个单元格始终对比自身存储的历史最小值、和前3个单元格的当前最小值,永远保留更小的数值,就能实现数值只下降、不回升的效果,根据你用的表格工具选对应方案即可。
方法1:迭代公式法(无代码,Excel/WPS通用)
不需要写宏,操作最快:
- 先开启表格的迭代计算开关:
- Excel路径:「文件-选项-公式」,勾选「启用迭代计算」,将最大迭代次数设置为
1 - WPS路径:「文件-选项-重新计算」,勾选「迭代计算」,迭代次数同样设为
1
- Excel路径:「文件-选项-公式」,勾选「启用迭代计算」,将最大迭代次数设置为
- 假设3个动态数值单元格为A1、B1、C1,历史最低值输出单元格为D1,直接在D1输入以下公式回车即可:
公式逻辑:D1为空时(第一次输入)直接取3个单元格的当前最小值;后续每次单元格数值刷新,都会自动拿D1存的历史最低值和3个单元格的当前最小值对比,只有当前最小值更小的时候才更新D1的数值。=IF(D1="",MIN(A1:C1),MIN(D1,MIN(A1:C1)))
注意:使用该方法时不要手动清空D1单元格,否则历史最低值会重置为清空时刻的3个单元格最小值。
方法2:VBA事件法(稳定性更高,适合长期使用的表格)
如果怕迭代开关被误关导致逻辑失效,可以用工作表事件触发实现,不需要依赖迭代设置:
- 按快捷键
Alt+F11调出VBA编辑器,在左侧资源栏双击你需要设置的对应工作表,在弹出的代码窗口粘贴以下代码:Private Sub Worksheet_Change(ByVal Target As Range) ' 监控A1:C1范围的数值变动 If Not Intersect(Target, Range("A1:C1")) Is Nothing Then Application.EnableEvents = False currMin = Application.WorksheetFunction.Min(Range("A1:C1")) ' D1为空时直接赋值,否则仅当当前最小值小于历史值时更新 If Range("D1") = "" Then Range("D1") = currMin ElseIf currMin < Range("D1") Then Range("D1") = currMin End If Application.EnableEvents = True End If End Sub - 保存文件时选择「启用宏的工作簿(.xlsm)」格式即可,后续只要A1-C1数值变动,D1会自动更新历史最低,不会因为设置变动失效。
在线协作文档适配(飞书/腾讯文档/Google Sheets)
如果用的是在线表格,操作更简单:
- 飞书、腾讯文档默认支持循环引用迭代,直接在D1单元格输入上面提到的迭代公式即可生效,不需要额外改设置。
- Google Sheets需要先点「文件-设置-计算」,开启迭代计算并将最大迭代次数设为1,再输入公式即可。
内容的提问来源于stack exchange,提问作者Frank Boon
相关产品推荐
相关产品推荐

