Excel - 如果 a 列数据相同,则将 b 列堆叠在行中

Excel - 如果 a 列数据相同,则将 b 列堆叠在行中

我正在处理一个包含两列的数据集。A 列是一组 ID,B 列是电子邮件地址。

A 列全部唯一,但 B 列中会有重复项。

我需要在 B 列中找到重复的实例,并将 A 列中的唯一数据合并到 B 列中第一个数据实例旁边的行中。

例如:

1234.   [email protected]
1256.   [email protected]
1357.   [email protected]

我需要将其变成:

[email protected].    1234.   1256.  1357. 

合理?

答案1

数组(CSE)公式解决了该问题:

在此处输入图片描述

怎么运行的:

  • 为了在单元格中获取唯一的邮件 ID 公式D71,请使用以下公式完成公式Ctrl+Shift+Enter并填写。

    {=IFERROR(INDEX($B$71:$B$73, MATCH(0,COUNTIF($D$70:D70, $B$71:$B$73), 0)),"")}
    
  • 在单元格中输入此公式E71,最后Ctrl+Shift+Enter并正确填写。

    {=IFERROR(INDEX($A$71:$A$73,SMALL(IF($B$71:$B$73=$D71,ROW($A$71:$A$73)-MIN(ROW($A$71:$A$73))+1),COLUMNS($E$71:E71))),"")}
    

:警告: 添加这部分的目的是为了处理另一种可能性,这种可能性总是有可能的。

假设您有更多如下所示的邮件 ID,按随机顺序排列。

在此处输入图片描述

注意:

  • 在这种情况下,可以使用我上面使用的公式,但您需要扩展单元格引用。
  • 对于单元格中的公式,D71单元格引用应该是($B$71:$B$76)
  • 对于单元格中的公式也E71应该是$A$71:$A$76& $B$71:$B$76

如果位置(单元格范围)发生变化,则需要调整公式中的单元格引用。

答案2

如果您拥有带有 Office 365 的 Excel,并且具有新的FILTERUNIQUE函数以及动态数组,则可以使用以下命令:

  • 将您的数据变成桌子 我使用了@RajeshS 的例子

  • 要创建唯一的电子邮件列表:

    D3: =UNIQUE(Table1[Email])

    • 这将自动填充必要的结果

`E3:  =TRANSPOSE(INDEX(FILTER(Table1,Table1[Email]=D3),0,1))`
  • 这将自动向右填充结果
  • 选择 E3 并根据需要向下填充

在此处输入图片描述

如果你想知道结果在 B 列中第一个数据实例旁边的行中,然后使用以下公式:

C2: =IF(COUNTIF($B$2:B2,B2)=1,TRANSPOSE(FILTER(ID,B2=Email)),"")

在此处输入图片描述

如果您没有 O365,则可以使用以下方法轻松将结果创建为单独的表格Power Query (适用于 Excel 2010 及以上版本)

M 代码

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"Email", type text}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Email"}, {{"Grouped", each _, type table [ID=number, Email=text]}}),
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "ID", each Table.Column([Grouped],"ID")),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Grouped"}),
    #"Extracted Values" = Table.TransformColumns(#"Removed Columns", {"ID", each Text.Combine(List.Transform(_, Text.From), ";"), type text}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Extracted Values", "ID", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"ID.1", "ID.2", "ID.3"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"ID.1", Int64.Type}, {"ID.2", Int64.Type}, {"ID.3", Int64.Type}})
in
    #"Changed Type1"

相关内容