求列内平均最高的三连单元格组中间位置:公式合并优化求助
问题:合并公式获取连续三单元格组的中间位置
需求:在A列中找出平均数值最高的连续三个单元格组(如A1:A3或A20:A22),并获取该组中间单元格的位置。
现有两步实现方案:
- 辅助列公式:
=IF(AND(A1>AVERAGE(A1:A51), A2>AVERAGE(A1:A51), A3>AVERAGE(A1:A51)), SUM(A1:A3), 0) - 匹配行号公式:
=MATCH(MAX(C1:C51),C1:C51,0)
疑问:能否将两个公式合并为单个单元格内的一行公式,无需使用辅助列?
解决方案
可以通过数组公式或BYROW函数实现单公式计算,以下分两种场景给出:
场景1:直接找平均最高的组(等价于找和最高的组)
因为三个数的平均=和/3,平均最高的组必然是和最高的组,可直接通过计算每组和简化逻辑:
=MATCH(MAX(BYROW(SEQUENCE(ROWS(A1:A51)-2,1,1), LAMBDA(x, SUM(OFFSET(A1,x-1,0,3))))), BYROW(SEQUENCE(ROWS(A1:A51)-2,1,1), LAMBDA(x, SUM(OFFSET(A1,x-1,0,3)))), 0)+1
公式逻辑:
SEQUENCE(ROWS(A1:A51)-2,1,1):生成1到49的序列,对应A列中所有连续三组的起始行索引(A1:A3到A49:A51共49组)BYROW+LAMBDA:遍历每个起始行,用OFFSET选取对应连续三个单元格并求和MAX:找出所有组中的最大和MATCH:定位最大和对应的起始行号,最后+1得到中间单元格的行号(比如起始行1对应中间行2)
场景2:保留原辅助列的筛选逻辑(仅考虑组内三单元格都大于整列平均的组)
如果需要和原方案一致,只筛选组内每个单元格都大于A1:A51整列平均的组,可使用以下公式:
=MATCH(MAX(ARRAYFORMULA(IF((A1:A49>AVERAGE(A1:A51))*(A2:A50>AVERAGE(A1:A51))*(A3:A51>AVERAGE(A1:A51)), SUMIF(ROW(A1:A51), ">="&ROW(A1:A49), A1:A51)-SUMIF(ROW(A1:A51), ">"&ROW(A1:A49)+2, A1:A51), 0))), ARRAYFORMULA(IF((A1:A49>AVERAGE(A1:A51))*(A2:A50>AVERAGE(A1:A51))*(A3:A51>AVERAGE(A1:A51)), SUMIF(ROW(A1:A51), ">="&ROW(A1:A49), A1:A51)-SUMIF(ROW(A1:A51), ">"&ROW(A1:A49)+2, A1:A51), 0))), 0)+1
公式逻辑:
- 用
(A1:A49>AVERAGE(...))*(A2:A50>...)*(A3:A51>...)替代原AND函数(数组环境下AND无法批量计算,用乘法实现逻辑与) - 对符合条件的组计算和,不符合的返回0
- 后续通过
MAX+MATCH定位最大和对应的起始行,+1得到中间单元格行号
内容的提问来源于stack exchange,提问作者Reg Box
相关产品推荐
相关产品推荐

