You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Excel中用另一工作表的多行数据填充列

解决Excel分组数据横向展开的问题

看起来你需要把按分组(A/B/C)的多行数据,转成每个分组一行、同组条目横向排列的格式,这可以用Excel的函数组合来实现,分两种场景给你方案:

方案1:适用于所有Excel版本(包括旧版)

假设你的源数据在Sheet1的A:C列(A列是分组,B列是名称,C列是数值),目标表在Sheet2

  1. 提取唯一分组:在Sheet2的A2单元格输入:

    =UNIQUE(Sheet1!A:A)
    

    (如果是Excel 2019及更早版本,没有UNIQUE的话,可以用=INDEX(Sheet1!A:A,MIN(IF(COUNTIF(Sheet2!$A$1:A1,Sheet1!A:A)=0,ROW(Sheet1!A:A),99999))),然后下拉直到出现错误,再把错误单元格清空)

  2. 提取第1个条目

    • 在Sheet2的B2(第1个条目名称)输入:
      =IFERROR(INDEX(Sheet1!B:B,SMALL(IF(Sheet1!A:A=$A2,ROW(Sheet1!A:A)),1)),"")
      
      旧版本需要按Ctrl+Shift+Enter触发数组公式,365/2021直接回车即可。
    • 在Sheet2的C2(第1个条目数值)输入:
      =IFERROR(INDEX(Sheet1!C:C,SMALL(IF(Sheet1!A:A=$A2,ROW(Sheet1!A:A)),1)),"")
      
  3. 提取第2个条目

    • Sheet2的D2:
      =IFERROR(INDEX(Sheet1!B:B,SMALL(IF(Sheet1!A:A=$A2,ROW(Sheet1!A:A)),2)),"")
      
    • Sheet2的E2:
      =IFERROR(INDEX(Sheet1!C:C,SMALL(IF(Sheet1!A:A=$A2,ROW(Sheet1!A:A)),2)),"")
      
  4. 提取第3个条目

    • Sheet2的F2:
      =IFERROR(INDEX(Sheet1!B:B,SMALL(IF(Sheet1!A:A=$A2,ROW(Sheet1!A:A)),3)),"")
      
    • Sheet2的G2:
      =IFERROR(INDEX(Sheet1!C:C,SMALL(IF(Sheet1!A:A=$A2,ROW(Sheet1!A:A)),3)),"")
      

最后把这些公式下拉到Sheet2的A列所有分组对应的行,就能得到你想要的格式啦。

方案2:适用于Excel 365/2021(动态数组更简洁)

如果用的是支持动态数组的Excel版本,操作会简单很多:

  1. 同样在Sheet2的A2输入=UNIQUE(Sheet1!A:A)提取唯一分组。
  2. 在Sheet2的B2输入以下公式,它会自动横向填充当前分组的所有条目,不足的位置显示空:
    =IFERROR(TRANSPOSE(FILTER(Sheet1!B:C,Sheet1!A:A=$A2)),"")
    
    下拉这个公式到所有分组行,搞定!

公式原理小解释

  • INDEX+SMALL+IFIF(Sheet1!A:A=$A2,ROW(Sheet1!A:A))会筛选出当前分组的所有行号,SMALL(...,n)取第n个行号,INDEX根据行号提取对应单元格的值,IFERROR处理没有第n个条目时的错误,返回空字符串。
  • FILTER+TRANSPOSEFILTER直接筛选出当前分组的B:C列数据,TRANSPOSE把多行数据转成横向的多列,完美匹配你的需求。

内容的提问来源于stack exchange,提问作者user2853753

火山引擎 最新活动