Excel公式需求:获取行内全局最大值后局部最小值的单元格地址
解决Excel中获取全局最大值所在单元格地址的问题
你刚才的公式踩了个典型的小坑——MAX(D2:D3600)返回的是区域里的数值最大值900,而不是这个最大值所在的行号,所以公式会把900当成行号,返回$D$900,这显然和你要的$D$830不符。
正确获取最大值所在单元格地址的公式
分两种Excel版本给你适配方案:
Excel 365/2021(支持动态数组)
直接用这个公式就能得到正确地址:=ADDRESS(MATCH(MAX(D2:D3600), D2:D3600, 0)+1, 4, 1, 1)逻辑拆解:
MATCH(MAX(D2:D3600), D2:D3600, 0)找到最大值在D2:D3600区域内的相对位置(比如这里是第829位,因为从D2开始计数)- 加1后得到绝对行号830,列号4对应D列,最后两个
1表示使用绝对引用样式(就是$D$830这种格式)
旧版Excel(需按Ctrl+Shift+Enter作为数组公式输入)
用这个数组公式:=ADDRESS(MAX(IF(D2:D3600=MAX(D2:D3600), ROW(D2:D3600))), 4, 1, 1)逻辑拆解:
IF(D2:D3600=MAX(D2:D3600), ROW(D2:D3600))筛选出所有等于最大值的单元格的行号MAX取出这些行号里的最大值(如果有多个相同最大值,会返回最后一个的行号;要第一个的话把MAX换成MIN就行)- 再用
ADDRESS组合成标准单元格地址
额外:查找最大值之后的局部最小值
假设最大值在$D$830,要找它之后(D831到D3600)的局部最小值(即比左右相邻单元格都小的数值),可以用这个公式(旧版需按Ctrl+Shift+Enter):
=INDEX(D:D, MIN(IF((D831:D3599<D830:D3598)*(D831:D3599<D832:D3600), ROW(D831:D3599), 99999)))
如果只是要最大值之后的全局最小值(不是局部),那就更简单:
先找最小值:=MIN(D831:D3600),再获取它的地址:
=ADDRESS(MATCH(MIN(D831:D3600), D831:D3600, 0)+830, 4, 1, 1)
内容的提问来源于stack exchange,提问作者gloschtla
相关产品推荐
相关产品推荐

