Excel嵌套BYROW函数:实现产品-经理-销售代表层级合并需求
问题需求
现有包含ID、产品、销售经理、销售代表、代表状态的5列数据,需按产品→销售经理→销售代表的层级嵌套汇总展示,要求纯Excel公式实现,禁止使用VBA或数据透视表。
样例数据源
| ID | 产品 | 销售经理 | 销售代表 | 代表状态 |
|---|---|---|---|---|
| 1 | Product1 | Manager1 | Rep1 | Active |
| 2 | Product1 | Manager1 | Rep2 | Active |
| 3 | Product1 | Manager2 | Rep5 | Active |
| 4 | Product2 | Manager1 | Rep1 | Active |
| 5 | Product2 | Manager2 | Rep5 | Active |
| 6 | Product2 | Manager2 | Rep6 | Active |
| 7 | Product3 | Manager1 | Rep1 | Active |
| 8 | Product3 | Manager1 | Rep4 | Active |
| 9 | Product3 | Manager2 | Rep6 | Active |
期望输出格式
--- Product1 销售经理:Manager1 销售代表:Rep1(Active) 销售代表:Rep2(Active) 销售经理:Manager2 销售代表:Rep5(Active) --- Product2 销售经理:Manager1 销售代表:Rep1(Active) 销售经理:Manager2 销售代表:Rep5(Active) 销售代表:Rep6(Active) --- Product3 销售经理:Manager1 销售代表:Rep1(Active) 销售代表:Rep4(Active) 销售经理:Manager2 销售代表:Rep6(Active) ---
当前问题
现有LET公式仅能列出各产品对应的销售经理,无法关联展示该经理下属的销售代表及状态。
纯Excel公式解决方案
使用嵌套的LET+BYROW+UNIQUE+FILTER组合实现层级汇总,公式如下(假设数据在A1:E10区域,可根据实际范围调整):
=LET( 数据源,A1:E10, 产品列,INDEX(数据源,,2), 经理列,INDEX(数据源,,3), 代表列,INDEX(数据源,,4), 状态列,INDEX(数据源,,5), 唯一产品,UNIQUE(DROP(产品列,1)), 产品汇总,BYROW(唯一产品,LAMBDA(当前产品, LET( 产品对应数据,FILTER(DROP(数据源,1),产品列=当前产品), 唯一经理,UNIQUE(INDEX(产品对应数据,,2)), 经理汇总,BYROW(唯一经理,LAMBDA(当前经理, LET( 经理对应数据,FILTER(产品对应数据,INDEX(产品对应数据,,2)=当前经理), 代表行,BYROW(经理对应数据,LAMBDA(行, "销售代表:"&INDEX(行,,3)&"("&INDEX(行,,4)&")" )), TEXTJOIN(CHAR(10),TRUE,"销售经理:"&当前经理,代表行) ) )), TEXTJOIN(CHAR(10),TRUE,当前产品,经理汇总) ) )), TEXTJOIN(CHAR(10)&"---"&CHAR(10),TRUE,产品汇总)&CHAR(10)&"---" )
公式说明
- 基础定义:先定义数据源及各列引用,避免重复调用
- 产品层级:用
UNIQUE获取所有唯一产品,BYROW逐个处理每个产品 - 经理层级:针对当前产品,过滤出对应数据后获取唯一经理,再逐个处理每个经理
- 代表层级:针对当前经理,过滤出对应数据后拼接销售代表和状态文本
- 汇总拼接:用
TEXTJOIN+CHAR(10)(换行符)按层级拼接内容,最后加上分隔线
注意:需确保单元格开启「自动换行」,否则无法显示正确的换行格式
内容的提问来源于stack exchange,提问作者RSC001
相关产品推荐
相关产品推荐

