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

时间:2013-04-02 01:10:06

标签: excel excel-2011

我有一个Excel数据库,我正在尝试避免手动组合重复数据。除了tags列之外,我有一堆基本相同的列表。我想要做的是将这5个列表合并到1个列表中,使类别在单个单元格中以逗号分隔列表。

转过来

Data Example

进入这个

Desired result

有没有办法实现这个目标?我的文档有几千个列表,所以我显然试图避免手动编辑路径。我是一名Excel新手,所以任何你能指点我的手或教程都会受到赞赏。

2 个答案:

答案 0 :(得分:23)

这也可以使用公式来完成。为了我的例子,数据需要按第一列排序,并且需要一个标题行。

您还需要两列(C& D)。首先,如果A列中的数据与上面的行相同,则添加一个基本上表示连接B列中数据的公式,否则重置连接。下一列将包含一个公式,用于标识最终的连接,以便您稍后进行排序。

这就是我如何处理A列和A列中的列表和类别。 B(同样,数据需要按列A排序,并且需要有一个标题行): enter image description here

这是结果。现在我将复制整个范围并将值粘贴到另一个工作表中。列D为零的行是我想要使用的行。按列D排序会将它们浮动到顶部。 enter image description here

答案 1 :(得分:1)

这将(应该)从源表生成一个新表,并连接重复项。

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

打开VBA编辑器的快捷方式是Alt+F11(适用于Windows)和Alt+Fn+F11(适用于Mac)

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

我不确定osx中是否有“Scripting.Dictionary”,但是尝试它不会有什么坏处。

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