Google Sheets:如何实现姓名去重并转置对应作业数据?
解决Google Sheets中姓名对应多列作业的自动转置问题
可行的数组公式方案
假设姓名列是A2:A,作业列是B2:B,直接在空白单元格输入以下公式即可实现自动提取唯一姓名,并将对应作业转置到同一行的多列中,新增数据会自动更新:
=LET( unique_names, UNIQUE(FILTER(A2:A, A2:A<>"")), BYROW(unique_names, LAMBDA(name, HSTACK(name, TRANSPOSE(FILTER(B2:B, A2:A=name))))) )
公式说明
UNIQUE(FILTER(A2:A, A2:A<>"")):提取A列中非空的唯一姓名列表,过滤掉空行避免干扰。BYROW(unique_names, LAMBDA(name, ...)):遍历每个唯一姓名,对单个姓名执行后续转置操作。HSTACK(name, TRANSPOSE(FILTER(B2:B, A2:A=name))):将当前姓名和其对应的所有作业(转置为横向列)合并成一行,自动扩展到所需列数。
原公式无效的原因
你之前使用的=ARRAYFORMULA(TRANSPOSE(FILTER($B$2:$B, $A$2:$A=A2)))存在两个核心问题:
- 公式依赖当前行的
A2作为匹配条件,会重复生成相同姓名的行,无法自动提取唯一姓名集合。 FILTER在ARRAYFORMULA中无法自动遍历所有唯一姓名,必须手动下拉才能覆盖新增数据。
内容的提问来源于stack exchange,提问作者Jerome
相关产品推荐
相关产品推荐

