求基于数组的一维分类汇总单单元格无VBA公式解决方案
动态分类汇总数组的纯公式解决方案
需求说明
无需VBA或硬编码单个引用,基于指定列值对表格数据聚合,生成动态分类汇总数组。
前置条件
- 纯公式实现,禁止使用VBA
- 所有计算逻辑需封装在单个单元格公式内
原始数据
Label 1 Label 2 Label 3 | ID_01 | A | 1 | | ID_02 | D | 1 | | ID_03 | C | 2 | | ID_04 | B | 3 | | ID_05 | C | 5 | | ID_06 | A | 8 | | ID_07 | E | 12 | | ID_08 | C | 21 |
参数
<Label 2> = {A,B,C}
所需输出
仅需返回汇总值数组:{9,3,28}
实际场景问题与优化方案
实际使用时参数采用过滤条件,原公式会触发#VALUE!错误:
=LET(D,FILTER(Original_data[Label 1],ISNUMBER(SEARCH(Filter_1,Original_data[Label 3]))*(ISNUMBER(SEARCH(Filter_2,Original_data[Label 5])))), B,UNIQUE(FILTER(Original_data[Label 2],ISNUMBER(MATCH(Original_data[Label 1],D,0)))), C,FILTER(Original_data[Label 4],ISNUMBER(MATCH(Original_data[Label 1],D,0))), A,FILTER(Original_data[Label 2],ISNUMBER(MATCH(Original_data[Label 1],D,0))), E,SUMIF(A,B,C), IFNA(HSTACK(A,B,C,D,E),""))
改用MAP函数优化后,公式可正常运行:
=LET(D,FILTER(Original_data[Label 1],ISNUMBER(SEARCH(Filter_1,Original_data[Label 3]))*(ISNUMBER(SEARCH(Filter_2,Original_data[Label 5])))), B,UNIQUE(FILTER(Original_data[Label 2],ISNUMBER(MATCH(Original_data[Label 1],D,0)))), C,FILTER(Original_data[Label 4],ISNUMBER(MATCH(Original_data[Label 1],D,0))), A,FILTER(Original_data[Label 2],ISNUMBER(MATCH(Original_data[Label 1],D,0))), E,MAP(B,LAMBDA(Y,SUM((A=Y)*C))), IFNA(HSTACK(A,B,C,D,E),""))
内容的提问来源于stack exchange,提问作者mintti
相关产品推荐
相关产品推荐

