我有一个Excel数据库,我正在尝试避免手动组合重复数据。除了tags列之外,我有一堆基本相同的列表。我想要做的是将这5个列表合并到1个列表中,使类别在单个单元格中以逗号分隔列表。
转过来
进入这个
有没有办法实现这个目标?我的文档有几千个列表,所以我显然试图避免手动编辑路径。我是一名Excel新手,所以任何你能指点我的手或教程都会受到赞赏。
答案 0 :(得分:23)
这也可以使用公式来完成。为了我的例子,数据需要按第一列排序,并且需要一个标题行。
您还需要两列(C& D)。首先,如果A列中的数据与上面的行相同,则添加一个基本上表示连接B列中数据的公式,否则重置连接。下一列将包含一个公式,用于标识最终的连接,以便您稍后进行排序。
这就是我如何处理A列和A列中的列表和类别。 B(同样,数据需要按列A排序,并且需要有一个标题行):
这是结果。现在我将复制整个范围并将值粘贴到另一个工作表中。列D为零的行是我想要使用的行。按列D排序会将它们浮动到顶部。
答案 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