在Excel中将重复条目与唯一数据结合在一起

我有一个Excel数据库,我试图避免做一些重复的数据手动组合。 除了标签栏外,我还有一些列表,基本上是一样的。 我想要做的就是将这5个列表合并成1个列表,使得这些类别在单个单元格中以逗号分隔列表。

打开这个

数据示例

进入这个

期望的结果

有没有办法实现这一点? 我的文件有几千条清单,所以我显然试图避免手动编辑路线。 我是一个Excel新手,所以任何手或教程,你可以指给我,将不胜感激。

这也可以使用公式来完成。 对于我的例子来说,数据需要按第一列进行sorting,并且需要有一个标题行。

你需要两列(C&D)。 首先,如果列A中的数据与上面的行相同,则添加一个基本上说要连接列B中的数据的公式,否则重置连接。 下一列将包含一个公式来标识最终的连接,以便以后sorting。

这是我如何做与列A和B列表和类别(再次,数据将需要列Asorting,需要是一个标题行): 在这里输入图像说明

结果如下。 现在我将复制整个范围并将值粘贴到另一个表中。 列D为零的行是我想要使用的。 按D列sorting会将它们浮动到顶部。 在这里输入图像说明

这将(应)从源表中生成一个新的工作表连同重复的连接。

要使用下面的代码,您需要将其添加到VBA编辑器中的新模块

打开VBA编辑器的快捷键是Alt+F11 (对于Windows)和Alt+Fn+F11 (对于Mac)

编辑器打开后,从主菜单栏的“插入”菜单中select新模块。 它应该自动打开模块准备好接受代码,如果没有,你需要从项目浏览器中select它(将被命名为“ModuleN”,其中N是下一个可用数字)。

我不知道如果“Scripting.Dictionary”在osx中​​可用,但它不能尝试。

 Option Explicit Sub Main() Dim Source As Worksheet: Set Source = ThisWorkbook.Worksheets("Sheet1") Dim Destination As Worksheet: Set Destination = ThisWorkbook.Worksheets("Sheet2") Dim Records As Object: Set Records = CreateObject("Scripting.Dictionary") Dim Data As Variant Dim Index As Long Dim Row As Integer: Row = 1 Data = Source.Range("A1", "B" & Source.Rows(Source.UsedRange.Rows.Count).Row).Value2 For Index = LBound(Data, 1) To UBound(Data, 1) If Records.Exists(Data(Index, 1)) Then Destination.Cells(Records(Data(Index, 1)), 2).Value2 = Destination.Cells(Records(Data(Index, 1)), 2).Value2 & ", " & Data(Index, 2) Else Records.Add Data(Index, 1), Row Destination.Cells(Row, 1).Value2 = Data(Index, 1) Destination.Cells(Row, 2).Value2 = Data(Index, 2) Row = Row + 1 End If Next Index Set Records = Nothing End Sub