在Excel中将几行分组到单个字段中
我有以下格式的Excel中的数据
Employee Company John A George A Bob A Peter B Luke B
我需要:
Company Employees A John,George,Bob B Peter,Luke
Excel中有一个简单的方法吗?
我刚才发布了一个类似的答案。 同样的原则也适用于这里,虽然在你的情况下更容易。
-
首先,确保列表按B列sorting
-
在C2单元格中,您可以放置:
=IF(B2=B3,0,1)
-
我们稍后会用到它。 在单元格D2中,放置:
=IF(B1=B2,CONCATENATE(D1,", ",A2),A2)
-
拖/填两个公式,你应该得到一个完整列表,在C列中有
1
每个单元格上。复制/粘贴公式中的值,然后应用一个filter。 select列C中的全部0
并删除所有logging(在列A到D中)。 之后,删除filter,并按任何列sorting。
所以! 如果匹配样式比较/查找,您希望进行连接 。 不幸的是,Excel中没有这个function,但是这个稍微复杂的问答线索概括了两种可能的方法:
- 使用Excel的MoreFunctions加载项
- 使用自定义的“MultiLookup”VBAfunction
这两种方法都需要一些Excel的高级知识(VLOOKUP,复合函数等)。 如果你不熟悉这些东西,那么VLOOKUP是一个很好的开始!
甚至在没有设置标准的情况下,多于几个单元格的string连接最好留给VBA 用户定义的函数 (aka UDF )。 你未知的string数量和运用循环标准的情况肯定会适合这个类别。
点击Alt + F11 ,当VBE打开时,立即使用下拉菜单来插入►模块( Alt + I , M )。 将以下内容粘贴到标题为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, "; ")