【问题标题】:Excel - Transpose data from multiple rows to single column with matched valueExcel - 将数据从多行转置为具有匹配值的单列
【发布时间】:2018-03-14 11:05:36
【问题描述】:

好的,所以我想将一些数据从多行转换为多列。

我的输入数据看起来很松散 -

+----------+----------------+-----------------+
|   SKU    | Attribute Name | Attribute Value |
+----------+----------------+-----------------+
| Product1 | Colour         | Black           |
| Product1 | Size           | Large           |
| Product1 | Height         | 20cm            |
| Product1 | Width          | 40cm            |
| Product2 | Colour         | Red             |
| Product2 | Width          | 30cm            |
| Product2 | Size           | Large           |
| Product3 | Height         | 25cm            |
| Product3 | Width          | 30cm            |
| Product3 | Length         | 90cm            |
| Product3 | Weight         | 5kg             |
| Product3 | Size           | Large           |
| Product3 | Colour         | Blue            |
+----------+----------------+-----------------+

我想要实现的是这样的输出 -

+----------+--------+--------+--------+-------+--------+-------+
|   SKU    | Colour | Height | Length | Size  | Weight | Width |
+----------+--------+--------+--------+-------+--------+-------+
| Product1 | Black  | 20cm   |        | Large |        | 40cm  |
| Product2 | Red    |        |        | Large |        | 30cm  |
| Product3 | Blue   | 25cm   | 90cm   | Large | 5kg    | 30cm  |
+----------+--------+--------+--------+-------+--------+-------+

我尝试过数据透视表,但您只能返回数值,而不是我要查找的文本值。

我知道我可能可以通过一些步骤查找值并填充它们来实现它,但我觉得应该有一种更简单的方法来实现这一点。也许这是在数据库中而不是电子表格中更好地实现的东西。

非常感谢任何帮助。

【问题讨论】:

  • 您可以将此数据加载到 Access 中吗?有一个相当简单的规范查询,可用于在 SQL 中生成所需的输出。另外,我认为这可以通过数据透视表来完成,我只是不知道如何。
  • 如果您有 Excel 2010 /2013,您可以使用 Power Query(一个免费的 MS 插件),或者在 2016 年将 Data-->Get & Transform 转至 Attribute Name 列上的“Pivot”并选择 @ 987654326@ 的值

标签: excel vba excel-formula pivot powerquery


【解决方案1】:

您可以使用 Powerquery 在 ̶5̶ ̶s̶t̶e̶p̶s̶ 4 步中执行此操作。这是 2016 年内置的,并且是 Microsoft 从 2013 年起提供的免费插件(或 2010 Professional Plus with Software Assurance)。见信息https://www.microsoft.com/en-gb/download/details.aspx?id=39379

优点是您可以轻松地将行添加到源并刷新查询。

1)您选择范围内的任何单元格,然后在 2016 Get & Transform 选项卡中,早期版本使用 Powerquery 选项卡,从表中选择数据。将弹出一个窗口,其中包含您的数据范围:

2) 转换 > 透视列 > 值列中属性值的属性名称列(使用高级选项选择“不聚合”)

3) 将列拖动到所需的排列方式

4) 主页 > 关闭并加载到工作表

这是一个没有列重新排序的版本

编辑:

感谢@Ron Rosenfeld 提醒我真正的 null 值不需要替换为空白,因为它们在写入工作表时会显示为空白。

所以这一步被删除了:

4) 突出显示要替换空值的列,然后转到转换 > 替换值 > 和

要查找的值:null

替换为:

【讨论】:

  • 我在 2016 年发现 null 确实为 null。当我关闭查询时,工作表在这些位置有空单元格。
  • 就是这个想法不是吗?抱歉,不禁觉得我在这里遗漏了一些东西:-(
  • 我认为您可以省略上面将 null 替换为空的步骤
  • 噢!谢谢我现在明白了。
  • @QHarr 你是救生员!非常感谢你的帮助。我知道必须有一个解决方案。最初我有点迷茫,因为我找不到那个选项,但看起来它不包含在 Mac 版本中,所以切换到我的 PC 并在那里找到它。惊人的东西。再次感谢!
【解决方案2】:

您可以使用辅助列执行此操作,然后使用索引 + 匹配进行匹配。不像你想象的那么简单,但确实有效。

1) 将帮助列添加到您的数据中(称之为“帮助”)。 =concat(SKU,'Attribute Name')

2) 使用数据透视表在行中获取唯一的 SKU 列表,以便在数据更改后轻松更新。 (我假设这是在 A 列中,值从第 4 行开始)。

3) 使用另一个枢轴在另一个枢轴旁边的列中获取唯一的属性列表。然后你就有了结果的结构。 (我假设第一个值在 B3 中)。

4) 索引匹配表=index('Attribute Value', match(concat($A4,B$3),'Helper',0))的值

请注意,这仅在 SKU 和属性的每个组合都是唯一的情况下才有效。

【讨论】:

    【解决方案3】:

    这假设数据在 AC 列中:

    Sub croupier()
        Dim i As Long, N As Long, vA As String, vB As String, vC As String
        Dim rw As Long, cl As Long
    
    '                   setup column headers
    
        Columns(2).SpecialCells(2).Offset(1).Copy Range("D1")
        Columns(4).RemoveDuplicates Columns:=1, Header:=xlNo
        Columns(4).SpecialCells(2).Copy
        Range("E1").PasteSpecial Transpose:=True
        Columns(4).SpecialCells(2).Clear
    
    '                   setup row headers
    
        Columns(1).SpecialCells(2).Copy Range("D1")
        Columns(4).RemoveDuplicates Columns:=1, Header:=xlYes
    
    '                    deal the data
    
        N = Cells(Rows.Count, "A").End(xlUp).Row
        For i = 2 To N
            vA = Cells(i, 1)
            vB = Cells(i, 2)
            vC = Cells(i, 3)
            cl = Rows(1).Find(what:=vB, after:=Range("A1")).Column
            rw = Columns(4).Find(what:=vA, after:=Range("D1")).Row
            Cells(rw, cl) = vC
        Next i
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      • 2021-05-12
      • 2018-10-09
      • 1970-01-01
      相关资源
      最近更新 更多