Google Sheets数据整理:用单公式将原始数组转为指定格式表格
用单个公式整理Google Sheets数据为目标格式
可以使用以下数组公式实现需求,直接输入到目标区域的左上角单元格(如E2)即可自动溢出所有结果:
=MAP(UNIQUE(A2:A), LAMBDA(name, LET( player_rows, FILTER(B2:C, A2:A=name), all_teams, FLATTEN(player_rows), unique_ordered_teams, REDUCE("", all_teams, LAMBDA(acc, val, IF(OR(val="", ISNUMBER(XMATCH(val, acc))), acc, VSTACK(acc, val)) )), HSTACK(name, TOROW(unique_ordered_teams)) ) ))
公式逻辑拆解:
- 提取唯一球员:
UNIQUE(A2:A)获取A列所有不重复的球员姓名,作为后续处理的基础列表。 - 遍历处理每个球员:
MAP(..., LAMBDA(name, ...))逐个对每个唯一姓名执行数据整理逻辑。 - 获取对应球队数据:
FILTER(B2:C, A2:A=name)筛选出当前球员所有行的B、C列球队数据。 - 按原始顺序展开球队:
FLATTEN(player_rows)将每一行的B、C列按原始行顺序展开为垂直数组,确保球队的顺序与原始列表中出现的先后一致(先同一行的B列,再C列,依次处理后续行)。 - 去重并保留顺序:
REDUCE(...)遍历展开后的球队列表,仅保留首次出现的非空球队,自动跳过重复值,满足"优先保留排序靠前的球队"要求。 - 组合结果行:
HSTACK(name, TOROW(unique_ordered_teams))将球员姓名与去重后的横向球队列表合并为一行,形成目标格式。
满足的需求点:
- 基于A列生成唯一球员列表:通过
UNIQUE(A2:A)实现。 - 提取B、C列的唯一球队并保留原始顺序:通过
FLATTEN+REDUCE的组合,确保只保留首次出现的球队,且顺序与原始数据中出现的先后一致。
内容的提问来源于stack exchange,提问作者TheGunner4
相关产品推荐
相关产品推荐

