在Excel中将多行分组为单个字段

时间:2013-05-23 12:50:09

标签: excel

我在Excel中有以下格式的数据

Employee  Company
John      A
George    A
Bob       A
Peter     B
Luke      B

我需要:

Company Employees
A       John,George,Bob
B       Peter,Luke

在Excel中有一种简单的方法吗?

4 个答案:

答案 0 :(得分:4)

我刚才发布了something similar的答案。同样的原则可以在这里适用,但在你的情况下更容易。

  1. 首先,确保列表按B列排序。

  2. 在单元格C2中,您可以输入:

    =IF(B2=B3,0,1)

  3. 我们稍后会使用它。在单元格D2中,输入:

    =IF(B1=B2,CONCATENATE(D1,", ",A2),A2)

  4. 向下拖动/填充两个公式,您应该在C列中有1的每个单元格上获得完整列表。在公式上复制/粘贴值,然后应用过滤器。选择C列中的所有0并删除所有记录(在A到D列中)。之后,删除过滤器并按任何列排序。

答案 1 :(得分:0)

答案 2 :(得分:0)

原来如此!如果匹配样式比较/查找,您想要进行连接。不幸的是,Excel中没有任何开箱即用的功能,但这个稍微复杂的Q& A线程概述了两种可能的方法:

  1. 使用Excel的MoreFunctions加载项
  2. 使用自定义“MultiLookup”VBA功能
  3. http://answers.microsoft.com/en-us/office/forum/office_2003-excel/if-vlookup-is-match-then-concatenate/26f6794d-8663-4e59-9a1b-a598c78f3bed

    这两种方法都需要一些Excel的高级知识(VLOOKUP,复合函数等)。如果你不熟悉这些东西,那么VLOOKUP是一个很好的起点!

答案 3 :(得分:0)

多个单元格上的字符串连接最好留给VBA 用户定义函数(又名 UDF ),即使没有设置标准。您对未知数量的字符串和应用循环标准的情况肯定适合此类别。

点击 Alt + F11 ,当VBE打开时,立即使用下拉菜单插入►模块( Alt + 中号)。将以下内容粘贴到标题为 Book1 - Module1(Code)的新窗格中。

Public Function conditional_concat(rSTRs As Range, rCRITs As Range, rCRIT As Range, Optional sDELIM As String = ", ")
    Dim c As Long, sTMP As String
    For c = 1 To Application.Min(rSTRs.Cells.Count, rCRITs.Cells.Count)
        If rCRITs(c).Value2 = rCRIT.Value2 Then _
            sTMP = sTMP & rSTRs(c).Value & sDELIM
    Next c
    conditional_concat = Left(sTMP, Application.Max(Len(sTMP) - Len(sDELIM), 0))
End Function

点击 Alt + Q 返回工作表。像任何本机Excel工作表函数一样使用此UDF。语法是,

conditional_concat(<range of strings>, <range of conditions>, <cell with condition>, [optional] <delimiter as string>)

Conditional String Concatenation

E2中的公式是,

=conditional_concat(A$2:A$99, B$2:B$99, D2)

根据需要填写。我已使用可选的 sDELIM 参数在E3中提供分号消除,

=conditional_concat(A$2:A$99, B$2:B$99, D3, "; ")