如何用SUMIF结合数组参数实现无辅助列的多条件唯一值求和?
解决方案
核心思路
先筛选出term+desc拼接不重复的行,再对这些行按mod的唯一值分组求和num列,全程无需辅助列。
可用公式(R1C1格式,适配你的数据结构)
=LET( 数据源, R2C1:R6C4, // 对应num列(C1)、term列(C2)、desc列(C3)、mod列(C4)的范围 唯一组合, UNIQUE(CHOOSECOLS(数据源,2,3)), // 获取term和desc的唯一配对 去重后数据, FILTER(数据源, BYROW(CHOOSECOLS(数据源,2,3), LAMBDA(行, COUNTIFS(唯一组合, 行)=1))), // 筛选term+desc不重复的行 唯一mod值, UNIQUE(CHOOSECOLS(数据源,4)), // 获取mod列的所有唯一值 SUMIFS(CHOOSECOLS(去重后数据,1), CHOOSECOLS(去重后数据,4), 唯一mod值) )
原方法报错原因
你直接将INDEX(R2C4:R6C4;XMATCH(R2C8:R5C8;R2C2:R6C2 & " - " & R2C3:R6C3);1)替换到SUMIF的第一个参数时,因数组维度不匹配触发#VALUE!错误:
- XMATCH的查找值
R2C8:R5C8是横向区域,生成的INDEX结果为横向溢出数组 - SUMIF要求第一个参数为纵向区域/数组,横向数组无法匹配导致报错
简化嵌套版(无需LET,可读性稍弱)
如果不想用LET整理逻辑,可直接嵌套公式:
=SUMIFS( FILTER(R2C1:R6C1, BYROW(R2C2:R6C2&" - "&R2C3:R6C3, LAMBDA(x, COUNTIF(R2C2:R6C2&" - "&R2C3:R6C3, x)=1))), FILTER(R2C4:R6C4, BYROW(R2C2:R6C2&" - "&R2C3:R6C3, LAMBDA(x, COUNTIF(R2C2:R6C2&" - "&R2C3:R6C3, x)=1))), UNIQUE(R2C4:R6C4) )
内容的提问来源于stack exchange,提问作者Carlos Cezar
相关产品推荐
相关产品推荐

