You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

优化Excel公式:减少OFFSET函数重复调用,降低手动输入量

Excel公式优化:简化滑动窗口求和取最大值的写法

需求

改写现有Excel公式,减少手动重复输入,避免多次调用OFFSET函数(每次使用不同列参数),转而支持直接传入列范围作为输入。

原公式

MAX(SUM(OFFSET(C3,0,COLUMNS(C3:C3)-1,1,$A$3)),SUM(OFFSET(C3,0,COLUMNS(C3:D3)-1,1,$A$3)),SUM(OFFSET(C3,0,COLUMNS(C3:E3)-1,1,$A$3)),SUM(OFFSET(C3,0,COLUMNS(C3:F3)-1,1,$A$3)))

失败尝试

曾尝试用SEQUENCE简化,但未得到预期结果:

MAX(SUM(OFFSET(C3,0,SEQUENCE(1,COLUMNS($C$3:$F$3)-1,0,1),1,$A$3)))

示例说明

  • 第一行(A1=4):按每4列滑动求和(如B1:E1和为2,C1:F1和为1等),最终返回最大值2
  • 第二行(A2=3):按每3列滑动求和,返回对应最大值

示例数据

ABCDEFGHIJ
4101000011
3111000000
7110000001
2011001110
6101000011
8111000000
3110000001
3101000011
5111000000
9110000001
2110000001
3011001110
7110000001
6011001110

解决方案

方案1:使用MAP+OFFSET(动态数组兼容)

=MAX(MAP(SEQUENCE(1, COLUMNS($B:$J)-$A3+1, 0), LAMBDA(x, SUM(OFFSET($B3, 0, x, 1, $A3)))))
  • 逻辑:SEQUENCE生成所有合法的起始偏移量,MAP遍历每个偏移量,对对应区域求和,最后用MAX取所有求和结果的最大值
  • 优势:简洁直观,直接对应需求逻辑

方案2:使用SUMPRODUCT(非易失性,更稳定)

=MAX(SUMPRODUCT(--(COLUMN($B:$J)-COLUMN($B3)>=SEQUENCE(COLUMNS($B:$J)-$A3+1,1,0))*(COLUMN($B:$J)-COLUMN($B3)<SEQUENCE(COLUMNS($B:$J)-$A3+1,1,$A3)), $B3:$J3))
  • 逻辑:通过列号判断生成滑动窗口的掩码,用SUMPRODUCT计算每个窗口的和,最后取最大值
  • 优势:避免OFFSET的易失性(公式会随任意单元格修改而重新计算),运行更稳定

失败原因分析

你之前的SEQUENCE尝试失败,核心原因是:
OFFSET接收数组偏移量时会返回多个区域,但SUM函数会直接将所有区域的数值合并后求和,得到一个单一总和,而非对每个区域分别求和。此时MAX只能取这个单一值,无法得到各个滑动窗口的求和最大值。

内容的提问来源于stack exchange,提问作者N. Berenst

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:42:55