如何将MAX()与自动多范围值搭配使用,实现跨列动态统计需求
可以实现,不同Excel版本对应写法如下:
1. Excel 365/2021(支持动态数组,最简写法)
直接粘贴到任意列的目标单元格即可自动适配当前列的前置列范围:
=MAX(BYCOL(INDIRECT("A:"&SUBSTITUTE(ADDRESS(1,COLUMN()-1,4),"1","")),LAMBDA(col,COUNTIF(col,"*[Text String]*"))))
如果需要指定行范围(比如你示例中从第3行到动态行数,假设动态行数存在单元格$X$1中),调整为:
=MAX(BYCOL(INDIRECT("A3:"&SUBSTITUTE(ADDRESS(1,COLUMN()-1,4),"1","")&$X$1),LAMBDA(col,COUNTIF(col,"*[Text String]*"))))
逻辑说明:
COLUMN()获取当前所在列的序号,SUBSTITUTE(ADDRESS(1,COLUMN()-1,4),"1","")可以兼容所有列号,把当前列的前一列序号转为对应的列名(比如D列的前一列是C,E列的前一列是D,超过Z列的AA、AB列也能正常转换)BYCOL会遍历指定范围内的每一列,对每一列执行LAMBDA中定义的COUNTIF计算,最后用MAX取所有计算结果的最大值
2. 旧版Excel(不支持动态数组和LAMBDA)
需要用数组公式实现,输入完成后按Ctrl+Shift+Enter组合键生效:
=MAX(COUNTIF(INDIRECT(SUBSTITUTE(ADDRESS(1,ROW(A1),4),"1","")&":"&SUBSTITUTE(ADDRESS(1,ROW(A1),4),"1","")),"*[Text String]*"))
如果需要指定行范围,调整为:
=MAX(COUNTIF(INDIRECT(SUBSTITUTE(ADDRESS(1,ROW(A1),4),"1","")&"3:"&SUBSTITUTE(ADDRESS(1,ROW(A1),4),"1","")&[Dynamic Number]),"*[Text String]*"))
基础版适配(仅取前置列最大值,不需要COUNTIF)
如果只是需要实现你示例中D列取A:C最大值、E列取A:D最大值的基础需求,Excel 365直接用:
=MAX(A:INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN()-1,4),"1","")&":"&SUBSTITUTE(ADDRESS(1,COLUMN()-1,4),"1","")))
注意:如果不需要兼容超过Z列的场景,可以把
SUBSTITUTE(ADDRESS(1,COLUMN()-1,4),"1","")简化为CHAR(COLUMN()+63),公式更短。
内容的提问来源于stack exchange,提问作者AsianOtakuGuy
相关产品推荐
相关产品推荐

