如何通过单元格行号与列号实现动态MAX函数?
解决动态范围的MAX计算问题
你用ADDRESS的方法行不通,因为ADDRESS函数返回的是文本格式的单元格地址(比如"A5"、"C10"),而MAX需要的是真正的单元格引用,不是文本,所以没法直接计算。给你两种可行的解决办法:
方法一:用INDIRECT转换文本引用
把两个ADDRESS生成的地址用&":"&拼接成完整的范围文本,再用INDIRECT函数把文本转换成可识别的单元格引用,公式如下:
=MAX(INDIRECT(ADDRESS(5,1)&":"&ADDRESS(10,3)))
这个公式会先生成"A5:C10"的文本地址,再通过INDIRECT转换成实际的单元格范围,最后用MAX计算最大值。
方法二:用INDEX生成动态引用(推荐)
INDEX函数可以直接根据行号和列号返回对应的单元格引用,不需要转换文本,而且它不是易失性函数(不会每次工作表变动都重新计算),效率更高。公式如下:
=MAX(INDEX($1:$1048576,5,1):INDEX($1:$1048576,10,3))
其中$1:$1048576代表整个工作表的行范围,你也可以换成具体的列范围(比如A:C),写成:
=MAX(INDEX(A:A,5):INDEX(C:C,10))
进阶用法:用单元格存储行号列号
如果想让范围更灵活,比如把起始行、起始列、结束行、结束列分别存在E1、E2、F1、F2单元格里,直接改这些单元格的数值就能调整范围,公式可以写成:
=MAX(INDEX($1:$1048576,E1,E2):INDEX($1:$1048576,F1,F2))
内容的提问来源于stack exchange,提问作者Markowitz
相关产品推荐
相关产品推荐

