如何在Google Sheets中自动捕获并更新期权保证金的历史最高/最低值?
解决Google Sheets期权保证金历史最值自动记录问题
核心需求
在跟踪股票期权的Google Sheets中,当T列(保证金/利润列)动态更新时,自动为每行期权记录历史最低值(V列)和历史最高值(W列),无需手动观察更新。
解决方案:使用Google Apps Script
普通函数(如AGGREGATE)只能基于当前数据集计算最值,无法保留历史状态,因此需要用脚本实现值的持久化对比更新。
步骤1:打开脚本编辑器
在你的Google Sheets中,点击顶部菜单「扩展程序」→「Apps Script」,进入脚本编辑界面。
步骤2:替换默认代码
删除编辑器里的默认代码,粘贴以下脚本:
function onEdit(e) { // 指定要处理的工作表名称,替换成你实际的表名 const targetSheetName = "期权跟踪表"; const sheet = e.source.getActiveSheet(); // 只处理目标工作表的T列(第20列)更新 if (sheet.getName() !== targetSheetName || e.range.getColumn() !== 20) return; const row = e.range.getRow(); // 跳过表头行(如果表头不是第1行,修改此处数值) if (row === 1) return; const currentMargin = e.range.getValue(); // 确保更新的是数值类型 if (isNaN(currentMargin)) return; // 获取当前行的V列(最低值,第22列)和W列(最高值,第23列)单元格 const lowCell = sheet.getRange(row, 22); const highCell = sheet.getRange(row, 23); const currentLow = lowCell.getValue(); const currentHigh = highCell.getValue(); // 更新历史最低值:为空或当前值更小则替换 if (currentLow === "" || currentMargin < currentLow) { lowCell.setValue(currentMargin); } // 更新历史最高值:为空或当前值更大则替换 if (currentHigh === "" || currentMargin > currentHigh) { highCell.setValue(currentMargin); } }
步骤3:配置并授权
- 点击编辑器顶部的「保存」按钮,给脚本命名(比如
TrackMarginHighLow)。 - 第一次运行脚本时会提示授权,按照页面提示完成权限授予(需要允许脚本访问你的表格数据)。
步骤4:测试使用
当T列的保证金数值更新时,对应行的V列(最低值)和W列(最高值)会自动对比历史值并更新:
- 如果当前保证金比V列现有值更小,V列会自动替换为当前值;
- 如果当前保证金比W列现有值更大,W列会自动替换为当前值;
- 首次录入保证金时,V/W列会直接填充当前值作为初始最值。
后续操作
当期权结束后,直接将该行的所有值(包括V/W列的历史最值)复制为数值到历史记录工作表即可,此时V/W列的值已经是静态的历史极值,不会再随原表更新。
内容的提问来源于stack exchange,提问作者Croppessy
相关产品推荐
相关产品推荐

