我在 Excel 中有以下格式的数据
Employee Company
John A
George A
Bob A
Peter B
Luke B
我需要:
Company Employees
A John,George,Bob
B Peter,Luke
有没有一种简单的方法可以在 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 列排序。
在单元格 C2 中,您可以输入:
=IF(B2=B3,0,1)
稍后我们将使用它。在单元格 D2 中,输入:
=IF(B1=B2,CONCATENATE(D1,", ",A2),A2)
向下拖动/填充两个公式,您应该1
在 C 列中的每个单元格上获得一个完整列表。在公式上复制/粘贴值,然后应用过滤器。选择0
C 列中的所有内容并删除所有记录(A 到 D 列中)。之后删除过滤器并按任何列排序。
即使没有设置标准,最好将多个单元格上的字符串连接留给 VBA用户定义函数(又名UDF )。您的字符串数量未知并应用循环标准的情况肯定适合此类别。
点击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, "; ")
所以!如果匹配样式比较/查找,您想进行连接。不幸的是,Excel 中没有任何开箱即用的功能,但是这个稍微复杂的问答线程概述了两种可能的方法:
这两种方法都需要一点 Excel 的高级知识(VLOOKUP、复合函数等)。如果您不熟悉这些东西,那么 VLOOKUP 是一个不错的起点!