You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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), ""))))))}

公式拆解

  1. 表头部分:TRANSPOSE(UNIQUE(FILTER(A:A,A:A<>"")))
    • 过滤A列空值后提取唯一变量,转置成横向表头。
  2. 内容生成部分:
    • data:筛选出A列非空的有效数据行(变量+数值)。
    • group_ids:通过SCAN函数给空行分隔的每个条目组分配唯一编号,实现数据分组。
    • unique_groups:提取所有有效的组编号,对应每个独立条目组。
    • 双层MAP遍历每个组和每个表头变量,通过FILTER+INDEX匹配对应组内的数值,无匹配时返回空字符串。

分两步实现(更易理解)

如果觉得单公式太复杂,可拆分为两个公式:

  1. 表头(D1单元格):
    =TRANSPOSE(UNIQUE(FILTER(A:A,A:A<>"")))
    
  2. 内容(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 03:57:40