Excel动态数组按行指定列求和:FILTER适配公式异常求助
问题
需要根据每行首单元格的指定列索引(以逗号分隔),对该行对应列求和。例如第1行首单元格值为1,2,3,4,则求和该行第1-4列;第2行首单元格值为5,6,...,12,则求和该行第5-12列。
针对普通单元格区域,使用以下公式可正常工作:
=BYROW(A2:M3,LAMBDA(α,SUM(CHOOSECOLS(DROP(α,,1),--TEXTSPLIT(TAKE(α,,1),",")))))
但将公式适配到FILTER筛选后的动态数组时:
=BYROW(FILTER($A$2:$M$3,$N$2:$N$5="yes"),LAMBDA(α,SUM(CHOOSECOLS(DROP(α,,1),--TEXTSPLIT(TAKE(α,,1),",")))))
出现异常:仅能提取每行的首个指定列(如第1行只取第1列,第2行只取第5列),无法对所有指定列求和。
解决方案
问题根源是FILTER返回的动态数组中,单行的维度特性导致TEXTSPLIT默认返回列方向的数组,而CHOOSECOLS需要接收行方向的列索引序列。只需将TEXTSPLIT的结果强制转为行数组即可修复:
=BYROW(FILTER($A$2:$M$3,$N$2:$N$5="yes"),LAMBDA(α,SUM(CHOOSECOLS(DROP(α,,1),TOROW(--TEXTSPLIT(TAKE(α,,1),","))))))
或者在TEXTSPLIT中指定按行拆分的参数(第三个参数设为1):
=BYROW(FILTER($A$2:$M$3,$N$2:$N$5="yes"),LAMBDA(α,SUM(CHOOSECOLS(DROP(α,,1),--TEXTSPLIT(TAKE(α,,1),",",,1)))))
两种方法都能确保列索引以行数组形式传递给CHOOSECOLS,从而正确选取所有指定列并求和。
内容的提问来源于stack exchange,提问作者andy leary
相关产品推荐
相关产品推荐

