在MAP中用LET定义的名称调用MAXIFS出现#CALC!错误的原因咨询
关于MAP+MAXIFS+LET定义名称组合导致#CALC!错误的分析
我通过HSTACK同时测试不同场景的公式如下:
=LET(item, "A", colA, A2:A7, colB, B2:B7, ux, UNIQUE(colA), noMapOut, MAXIFS(colB, colA, item), mapOut1, MAP(ux, LAMBDA(item, MAXIFS(B2:B7, A2:A7, item))), mapOut2, MAP(ux, LAMBDA(item, MAXIFS(colB, colA, item))), HSTACK(noMapOut, mapOut1, IFERROR(mapOut2, "#CALC!")) )
输出结果
输出结果显示:第一列返回分组A的最大值20,第二列返回各分组的最大值{20,10,30},第三列全部显示#CALC!错误(已用IFERROR包裹避免整个HSTACK输出报错)。
结果分析
noMapOut:按预期返回分组A的最大值,该场景使用LET定义的名称,证明未在MAP内调用时,MAXIFS可正常使用LET定义的范围名称。mapOut1:执行正常,该场景直接引用单元格范围,未使用LET定义的名称。mapOut2:返回#CALC!错误,该场景与mapOut1逻辑一致,但使用了LET定义的colA和colB名称,这是实际遇到的异常场景。
核心问题
当三个因素组合时出现异常:1)在MAP函数的LAMBDA内部使用MAXIFS;2)MAXIFS引用LET函数定义的范围名称。请问该现象有何解释?是操作错误还是Excel的bug?
测试输入数据
| Group | Values |
|---|---|
| A | 10 |
| A | 20 |
| B | 10 |
| B | 5 |
| C | 30 |
| C | 20 |
注:我不需要解决方法,仅想理解mapOut2场景的异常结果。可行的替代写法包括直接引用单元格范围(如mapOut1),或用FILTER替代MAXIFS,示例公式如下:
=LET(rng, A2:B7, colA, INDEX(rng,,1), colB, INDEX(rng,,2), colAUx, UNIQUE(colA), MAP(colAUx, LAMBDA(item, FILTER(colB, (colA=item) * (colB = MAX(FILTER(colB, colA=item)))) ))该公式可返回预期结果:
20 10 30
内容的提问来源于stack exchange,提问作者David Leal
相关产品推荐
相关产品推荐

