最大值所在位置
浅谈出口账务和excel函数
这张图展示的是用 Excel 365 的新函数(SCAN、LAMBDA、LET 等) 来查找所有最大值所在的位置的“一体版”公式。
你截图中的这个公式写得比较长,核心逻辑是通过 SCAN 遍历区域,找到最大值,再提取行号并组合输出。不过你图中的公式有一些语法瑕疵(例如 SCAN 的初始值写成了空字符串 "" 而非 0,且 FILTER 条件缺失等)。
下面直接给你提供可直接复制使用的标准公式,以及对应的解释:
满足条件的行号, FILTER(ROW(数据区域), 数据区域=最大值),
组装结果, HSTACK(满足条件的行号, IF(满足条件的行号, 最大值)),
(如果你的 Excel 支持中文变量名,上面这串可以直接用;如果报错,把变量名改成英文即可)
rows, FILTER(ROW(data), data=max_val),
result, HSTACK(rows, IF(rows, max_val)),
· 第一列:会依次输出 4、7、9(即 78 所在的行号)。
· 第二列:会依次输出 78、78、78(对应的最大值)。
2. FILTER(ROW(B2:B10), B2:B10=78):筛选出等于 78 的行号,得到 {4;7;9}。
3. HSTACK(行号, 最大值):把行号和最大值横向拼在一起,形成两列多行的数组。
4. IFNA(..., "无匹配"):防止数据区域没有最大值时报错。
如果你只是想快速达成图中的效果,不需要把所有逻辑塞进一个单元格,用下面这个简单组合最快:
· F2 单元格:=FILTER(ROW(B2:B10), B2:B10=MAX(B2:B10)) (查找位置)
· G2 单元格:=MAX(B2:B10) (显示最大值)
如果你坚持要用截图里的 SCAN 写法,说明你的 Excel 版本非常新(Beta 通道),但要注意 SCAN 的初始值必须与数据类型匹配,否则会直接报错。建议用我上面给的 FILTER 方案,兼容性和稳定性更好。