我有一个Excel数据库,我正在努力避免进行一些重复数据的手动组合。我有一堆清单,除了标签列之外,它们本质上是相同的。我想要做的是将这5个列表组合成1个列表,使类别在单个单元格中成为逗号分隔的列表。
转动这个

进入到这个

有什么方法可以做到这一点吗?我的文档有几千个清单,所以我显然是在尝试避免手动编辑路线。我是一个Excel新手,所以任何手把手或教程,你可以给我指点,将不胜感激。
发布于 2013-04-02 12:22:01
这也可以使用公式来完成。为了让我的例子起作用,数据需要按第一列排序,并且需要有一个标题行。
您还需要两个列(C & D)。首先,添加一个公式,其实质是如果列A中的数据与其上一行相同,则连接列B中的数据,否则重置连接。下一列将包含用于标识最终连接的公式,以便您稍后进行排序。
这就是我如何处理列A和列B中的列表和类别(同样,数据需要按列A排序,并且需要有一个标题行):

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

发布于 2013-04-02 09:44:09
这将(应该)从源工作表中生成一个新工作表,并将重复项连接在一起。
要使用以下代码,需要将其添加到VBA编辑器中的新模块中
打开VBA编辑器的快捷方式是Alt+F11 (适用于Windows)和Alt+Fn+F11 (适用于Mac)
一旦编辑器打开,通过从主菜单栏的"insert“菜单中选择它来添加一个新模块。它应该自动打开准备好接受代码的模块,如果没有,您需要从项目资源管理器中选择它(将被命名为"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 Subhttps://stackoverflow.com/questions/15754501
复制相似问题