ARRAYFORMULA+SUMIF先取整分组求和报错,求解决办法
问题解决:按分组先取整再求和
原始数据
| A列 | B列 |
|---|---|
| A | 1 |
| A | 2 |
| B | -1.7148 |
| B | 1.3454 |
| B | .3694 |
需求:使用单个公式,按A列的值对B列数值先保留两位小数取整,再分组求和。
原公式与结果
原公式:
=ARRAYFORMULA(sumif(a:a,unique(a:a),b:b))
当前结果:
| 当前结果 |
|---|
| 3 |
| 0 |
期望结果
| 期望结果 |
|---|
| 3 |
| .01 |
尝试的错误公式
修改后的公式出现错误提示Argument must be a range.:
=ARRAYFORMULA(sumif(a:a,unique(a:a),round(b:b,2)))
原因:SUMIF的第三个参数要求是实际单元格区域,不能是通过函数计算生成的数组(ROUND(B:B,2)属于计算数组,不是单元格范围)。
可行解决方案
方案1:使用QUERY函数(推荐,同时返回分组标签和结果)
=QUERY({A:A,ROUND(B:B,2)}, "select Col1, sum(Col2) where Col1 is not null group by Col1 label sum(Col2)''", 1)
- 原理:将A列和取整后的B列组合成虚拟数组,通过QUERY语句实现分组求和,自动过滤空白行,结果会显示分组(A/B)和对应的求和值。
方案2:使用MAP+LAMBDA+SUM组合(仅返回求和结果)
=ARRAYFORMULA(MAP(UNIQUE(A:A), LAMBDA(x, SUM(ROUND(FILTER(B:B, A:A=x), 2)))))
- 原理:用
UNIQUE(A:A)获取所有分组值,通过MAP遍历每个分组,筛选对应B列数据取整后求和。
方案3:使用SUMPRODUCT数组运算
=ARRAYFORMULA(SUMPRODUCT((A:A=UNIQUE(A:A))*ROUND(B:B,2)))
- 原理:利用数组匹配分组条件,将符合条件的取整后数值相乘求和,注意如果A列有空白行,建议限定具体范围(如
A2:A6、B2:B6)避免干扰。
内容的提问来源于stack exchange,提问作者esaunde1
相关产品推荐
相关产品推荐

