Google Sheets中Query结果的ArrayFormula运行最大值实现求助
解决方案
你可以直接将Query的结果嵌套进SCAN函数中,结合ARRAYFORMULA实现批量计算运行最大值,无需依赖辅助列或下拉操作,公式如下:
=ARRAYFORMULA(SCAN(0, QUERY(GOOGLEFINANCE("SPX","price",TODAY()-365,TODAY()),"Select Col2 offset 1",0), LAMBDA(acc, val, MAX(acc, val))))
公式说明:
QUERY(...):保持你原有的逻辑,获取标普500(SPX)过去一年的每日价格数据,返回单列结果(offset 1移除了表头行)。SCAN(0, 数据数组, LAMBDA(acc, val, MAX(acc, val))):SCAN函数会遍历数据数组中的每个值:0是初始累计值(因为SPX价格不可能为负,所以初始值设0不影响结果);- 每次迭代时,
acc代表到上一行的运行最大值,val是当前行的价格; - 通过
MAX(acc, val)更新累计最大值,最终生成每一行对应的运行最大值数组。
ARRAYFORMULA:确保公式一次性输出所有行的结果,无需手动下拉填充。
替代方案(适配旧版Google Sheets):
如果你的Google Sheets版本不支持SCAN函数,可以用BYROW结合INDEX实现:
=ARRAYFORMULA(BYROW(SEQUENCE(ROWS(QUERY(GOOGLEFINANCE("SPX","price",TODAY()-365,TODAY()),"Select Col2 offset 1",0))), LAMBDA(n, MAX(INDEX(QUERY(GOOGLEFINANCE("SPX","price",TODAY()-365,TODAY()),"Select Col2 offset 1",0), 1:n)))))
这个公式通过SEQUENCE生成行号序列,对每一行n,计算Query结果中第1到n行的最大值,不过因为重复调用了两次Query,数据量大时效率不如SCAN方案。
内容的提问来源于stack exchange,提问作者LawnBob
相关产品推荐
相关产品推荐

