在Excel中将几行分组到单个字段中

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

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

我需要:

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

Excel中有一个简单的方法吗?

我刚才发布了一个类似的答案。 同样的原则也适用于这里,虽然在你的情况下更容易。

  1. 首先,确保列表按B列sorting

  2. 在C2单元格中,您可以放置​​:

    =IF(B2=B3,0,1)

  3. 我们稍后会用到它。 在单元格D2中,放置:

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

  4. 拖/填两个公式,你应该得到一个完整列表,在C列中有1每个单元格上。复制/粘贴公式中的值,然后应用一个filter。 select列C中的全部0并删除所有logging(在列A到D中)。 之后,删除filter,并按任何列sorting。

所以! 如果匹配样式比较/查找,您希望进行连接 。 不幸的是,Excel中没有这个function,但是这个稍微复杂的问答线索概括了两种可能的方法:

  1. 使用Excel的MoreFunctions加载项
  2. 使用自定义的“MultiLookup”VBAfunction

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是一个很好的开始!

甚至在没有设置标准的情况下,多于几个单元格的string连接最好留给VBA 用户定义的函数 (aka UDF )。 你未知的string数量和运用循环标准的情况肯定会适合这个类别。

点击Alt + F11 ,当VBE打开时,立即使用下拉菜单来插入►模块( Alt + IM )。 将以下内容粘贴到标题为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>) 

条件字符串连接

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, "; ")