Google Sheets单公式实现两列数据唯一值转置与Query匹配
解决方案
一步生成完整结果(含表头)
直接在目标区域的左上角单元格(比如D1)输入以下数组公式,即可自动生成表头和对应数值:
={TRANSPOSE(UNIQUE(FILTER(A:A,A:A<>""))); ARRAYFORMULA( LET( data, FILTER(A:B, A:A<>""), group_ids, SCAN(0, A:A, LAMBDA(current, val, IF(val="", current, IF(OFFSET(val, -1, 0)="", current+1, current)))), unique_groups, UNIQUE(FILTER(group_ids, group_ids>0)), headers, TRANSPOSE(UNIQUE(INDEX(data,,1))), MAP(unique_groups, LAMBDA(g, MAP(headers, LAMBDA(h, IFERROR(INDEX(FILTER(INDEX(data,,2), INDEX(data,,1)=h, group_ids=g), 1), ""))))))}
公式拆解
- 表头部分:
TRANSPOSE(UNIQUE(FILTER(A:A,A:A<>"")))- 过滤A列空值后提取唯一变量,转置成横向表头。
- 内容生成部分:
data:筛选出A列非空的有效数据行(变量+数值)。group_ids:通过SCAN函数给空行分隔的每个条目组分配唯一编号,实现数据分组。unique_groups:提取所有有效的组编号,对应每个独立条目组。- 双层
MAP遍历每个组和每个表头变量,通过FILTER+INDEX匹配对应组内的数值,无匹配时返回空字符串。
分两步实现(更易理解)
如果觉得单公式太复杂,可拆分为两个公式:
- 表头(D1单元格):
=TRANSPOSE(UNIQUE(FILTER(A:A,A:A<>""))) - 内容(D2单元格,下拉填充):
注:公式中=ARRAYFORMULA(IFERROR(VLOOKUP(D$1:F$1,FILTER(A:B,SCAN(0,A:A,LAMBDA(c,v,IF(v="",c,IF(OFFSET(v,-1,0)="",c+1,c))))=ROW(A2)-ROW(D2)+1,2,FALSE),""))D$1:F$1需替换为你的表头实际范围,ROW(A2)-ROW(D2)+1用于匹配当前行对应的组编号。
内容的提问来源于stack exchange,提问作者MMsmithH
相关产品推荐
相关产品推荐

