分组标签并连接其文本值(如数据透视表)


22

我有一个包含以下数据的电子表格:

产品展示 属性
---------- + ----------
产品A | 青色
产品B | 青色
产品C | 青色
产品A | 品红
产品C | 品红
产品B | 黄色
产品C | 黄色
产品A | 黑色
产品B | 黑色

我想按列A对所有内容进行分组,并使列B为以逗号分隔的,共享列A的值的列表,如下所示:

产品展示 属性
---------- + --------------------------
产品A | 青色,洋红色,黑色
产品B | 青色,黄色,黑色
产品C | 青色,洋红色,黄色,黑色

不幸的是,数据透视表只知道如何使用数字值,并且为此而做的最深入的工作是计算A列出现的次数。

我最终可以通过将数据导入MySQL数据库并GROUP_CONCAT(Attribute)在带有GROUP BY Product子句的查询中使用MySQL的功能来实现这一目标,但是在试图找出一个Excel解决方案时,我反复地敲着桌子。

为了将来参考,在没有宏的Excel中是否可以做到这一点?不管是不是,一个人如何做到这一点?

Answers:


31
   |     A     |     B
---+-----------+-----------
 1 |  PRODUCT  | ATTRIBUTE
 2 | Product A | Cyan
 3 | Product B | Cyan
 4 | Product C | Cyan
 5 | Product A | Magenta
 6 | Product C | Magenta
 7 | Product B | Yellow
 8 | Product C | Yellow
 9 | Product A | Black
10 | Product B | Black

假设行1:1是标题行。

  1. A列排序以按产品分组

  2. 通过在C2中输入以下公式,以逗号分隔的格式准备数据,并复制到C3:C10。

    =IF(A2<>A1, B2, C1 & "," & B2)
    
  3. 通过输入D2 =A2<>A3并复制到D3:D10来识别有用的行

  4. 拷贝柱C:d,然后粘贴特殊作为值(AltE- - S- )。V Enter您现在将获得:

    Product A    Cyan       Cyan                   FALSE
    Product A    Magenta    Cyan,Magenta           FALSE
    Product A    Black      Cyan,Magenta,Black     TRUE
    Product B    Cyan       Cyan                   FALSE
    Product B    Yellow     Cyan,Yellow            FALSE
    Product B    Black      Cyan,Yellow,Black      TRUE
    Product C    Cyan       Cyan                   FALSE
    Product C    Magenta    Cyan,Magenta           FALSE
    Product C    Yellow     Cyan,Magenta,Yellow    TRUE
    
  5. 通过使用自动过滤器FALSE在D 列中进行过滤,删除无用的行,然后删除这些行。

  6. 完成。A和C列就是您所需要的。


1
那是在发挥您的想象力!恭喜!
jorgebg 2012年

尽管此方法有效,但自2012年以来,时间已经发生了变化。请在下面查找使用PowerQuery加载项(Excel 2016内置的)的新答案。再简单不过了。好吧,也许是和计算机聊天并要求它“对我的数据进行分组!” 也许再过6年。
ripvlan

11

我知道这是一个旧职位,但是今天我遇到了这个挑战。我使用了Microsoft 的PowerQuery加载项(注意:默认情况下它内置于Excel 2016中)。

  1. 选择你的桌子
  2. 在“电源查询”选项卡(或2016年为“数据”)下,选择“来自表”
  3. 点击“产品”列
  4. 在“转换”选项卡下,选择“分组依据”
  5. 在“视图”选项卡上,确保选中“公式栏”
  6. 更改公式

    从:

    = Table.Group(#"Changed Type", {"Product"}, {{"Count", each Table.RowCount(_), type number}})
    

    至:

    = Table.Group(#"Changed Type", {"Product"}, {{"Attributes", each Text.Combine([Attribute], ", "), type text}})
    

    单击此处查看从上方描绘步骤的图片

步骤6是利用Power Query(M)公式执行未通过UI中提供的基本操作公开的数据操作。Microsoft提供了有关Power Query中可用的所有高级功能的完整参考资料。


非常优雅的解决方案,可能是最好的解决方案。
asdmin

@matt poland,我想知道您是否知道如何使用这个非常棒的技巧来删除重复的值?
Lana B

在步骤1(选择表之后),您应该可以转到功能区中的“数据”选项卡,然后单击“删除重复项”。
马特·波兰

如果您不想更改原始表,则Power Query中还有另一个选项。在STEP 2之后,您可以按住CTRL并单击两个列,以便将它们都选中。然后,右键单击其中一列,然后选择“删除重复项”。然后继续执行步骤3
马特·波兰

谢谢!这是最好的答案。对于使用Excel 2016的用户,PowerQuery是内置的。只需按“数据”选项卡,然后在“获取和转换数据”部分中按“来自表/范围”。Power Query Editor将打开,按“视图”选项卡并启用编辑栏。其余说明按原样工作。
ripvlan

3

这里有两种方法,都是“非宏”的。

  1. 对于小的数据集,在首先按产品对它进行排序(类似于GROUP BY Product)之后,您可以首先复制“ Product”列,将其粘贴到其他位置,然后删除重复项。接下来,复制每个产品的“属性”,并复制每个产品旁边的“粘贴特殊的,翻译的”。然后在最终结果列中将逗号与每个转置属性连接起来。诚然,如果您的产品清单很长,那么所有这些“复制/特殊粘贴/转置”操作都会很快变老。

  2. 如果您有大量数据,则可以使用一些公式来获得最终结果,如下所示。F2,G2,H2,I2和N2中的公式由蓝色箭头指示。根据需要将它们复制到下面的行中。请注意,J2:L2使用与I2相同的公式。同样,F2公式引用的是跨越范围A:A的命名范围“产品”。

在此处输入图片说明


这些都是很好的解决方案,尽管仅当数据集很小时才如您所说。谢谢!
p0lar_bear 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.