ArrayFormula部分公式生效 加权计算数组公式返回全1问题排查
问题现象
- 正常可用的ArrayFormula数组公式:
=ArrayFormula(IF(ISBLANK(F:F); ""; E:E*G:G))
(该公式执行简单乘积计算,自动将结果填充到所有非空行)
- 正常可用的单行计算公式:
=(E1/$J$1*G1)+((1-(E1/$J$1))*$K$1)
(该公式用于实现加权排序相关计算)
- 改写后运行异常的ArrayFormula版本:
=ArrayFormula(IF(B:B=""; ""; (E1/$J$1*G1)+((1-(E1/$J$1))*$K$1)))
该公式不会触发报错,也能准确识别需要填充的行,但所有行的返回结果均为1,和预期仅1行返回值为1的效果不符。
问题原因
数组公式的逐行计算逻辑要求,需要逐行匹配取值的字段必须使用整列引用。你写的异常公式里,需要逐行取值的E列、G列只写了第一行的单元格E1、G1,公式展开计算时不会自动将引用行号向下递进,所有行都在调用第1行的E、G列数值计算,最终所有行返回的都是第一行的计算结果1。
第一个能正常运行的数组公式,对需要逐行计算的字段用了E:E、G:G这类整列引用,所以可以逐行匹配对应行的数值计算,结果正常。
解决方法
将公式中需要逐行取值的E、G列的固定行引用改为整列引用即可,绝对引用的固定参数$J$1、$K$1不需要修改——这两个是固定取值的权重参数,本身就不需要逐行递进。
修正后的公式:
=ArrayFormula(IF(B:B=""; ""; (E:E/$J$1*G:G)+((1-(E:E/$J$1))*$K$1)))
内容的提问来源于stack exchange,提问作者migueltic
相关产品推荐
相关产品推荐

