如何在Google Sheets中按客户列将多行数据合并为单行
Google Sheets 实现客户对应Owner/Helper多行转单行
分步实现方案
1. 获取唯一客户列表
在空白列(比如E列)的E1单元格输入:
=UNIQUE(A:A)
注:假设原数据中Cust列是A列,Name是B列,Role是C列,根据实际列调整
2. 生成动态表头
在F1单元格输入以下公式,自动生成Owner1、Owner2...和Helper1、Helper2...的表头:
=ARRAYFORMULA({"Owner"&SEQUENCE(MAX(COUNTIFS(A:A,UNIQUE(A:A),C:C,"Owner"))),"Helper"&SEQUENCE(MAX(COUNTIFS(A:A,UNIQUE(A:A),C:C,"Helper")))})
该公式会自动统计所有客户中最多的Owner和Helper数量,生成对应数量的表头列。
3. 填充Owner信息
在F2单元格输入公式,下拉填充所有客户对应的Owner:
=ARRAYFORMULA(IFERROR(INDEX(B:B,SMALL(IF((A:A=E2)*(C:C="Owner"),ROW(B:B)),SEQUENCE(MAX(COUNTIFS(A:A,UNIQUE(A:A),C:C,"Owner"))))),"")
公式会提取当前客户的所有Owner,按顺序填充到对应列,无匹配内容时显示空值。
4. 填充Helper信息
在Helper起始列(F列之后的对应列)的第二行输入:
=ARRAYFORMULA(IFERROR(INDEX(B:B,SMALL(IF((A:A=E2)*(C:C="Helper"),ROW(B:B)),SEQUENCE(MAX(COUNTIFS(A:A,UNIQUE(A:A),C:C,"Helper"))))),"")
下拉填充即可完成所有客户的Helper信息匹配。
自动化一次性生成方案
如果不想分步操作,可使用LET函数一次性生成完整结果,在空白单元格(比如E1)输入:
=LET( custs, UNIQUE(A:A), max_owners, MAX(COUNTIFS(A:A,custs,C:C,"Owner")), max_helpers, MAX(COUNTIFS(A:A,custs,C:C,"Helper")), headers, HSTACK("Cust", ARRAYFORMULA("Owner"&SEQUENCE(max_owners)), ARRAYFORMULA("Helper"&SEQUENCE(max_helpers))), data, MAP(custs, LAMBDA(c, HSTACK( c, ARRAYFORMULA(IFERROR(INDEX(B:B,SMALL(IF((A:A=c)*(C:C="Owner"),ROW(B:B)),SEQUENCE(max_owners))),"")), ARRAYFORMULA(IFERROR(INDEX(B:B,SMALL(IF((A:A=c)*(C:C="Helper"),ROW(B:B)),SEQUENCE(max_helpers))),"") ) )), VSTACK(headers, data) )
该公式会自动完成:提取唯一客户列表、生成对应数量的Owner/Helper表头、为每个客户匹配所有Owner和Helper并填充到对应列。
注意事项
- 确保原数据
Role列的取值严格为Owner和Helper(大小写一致),若有拼写差异,需调整公式中的对应文本。 - 若姓名包含特殊字符,使用
TEXTSPLIT+TEXTJOIN替代方案时,需更换不会出现在姓名里的分隔符(比如~)。
内容的提问来源于stack exchange,提问作者remy ouaini
相关产品推荐
相关产品推荐

