根据A列中的重复值组合行

时间:2017-05-16 21:41:57

标签: excel excel-vba excel-formula excel-2010 vba

*注意:我在搜索本网站的第二天,并没有找到一个有效或我能理解的好答案。我不知道编码,这只是为了工作。 (我没有时间在接下来的6个小时内学习它)。请帮助,因为我所看到的并没有回答我的问题。我已经发布了我在底部试过的众多VBA代码中的一个。它看起来很接近我需要的东西,但我不知道如何为MY数据编辑它。 *

我有一个供应商根据工作人员分配工作号码,无论我们多少次要求他们将所有信息放在一行中。所以我的问题是,如何根据作业编号组合行?有多个列与需要组合的行相关联,A-P或1-16,列A / 1包含重复的作业编号。我不需要总和,因为所有列都是文本或日期。我只需要组合行,如果列中有多个不同的条目,则用逗号分隔注释。例如:

example

前两行是我收到的内容的例子,第五行是我需要的(我为示例隐藏了一些列)。如您所见,任何具有重复值的列都是精简的,只有1个条目的列只复制单个条目,具有多个不同条目的列将所有条目组合到一个单元格中,并用逗号分隔每个条目。

我知道手工操作似乎很简单,但其中一些工作号码重复了20次,而且当供应商再次错误地提交信息时,我每周都会有600多个这样的工作号码。

这是我尝试过的VBA代码之一。这是原作。我不会告诉你我是如何为我的工作编辑的... ...我知道这太可怕了。请协助!

Sub mergeCategoryValues()     Dim lngRow As Long

With ActiveSheet
    Dim columnToMatch As Integer: columnToMatch = 1
    Dim columnToConcatenate As Integer: columnToConcatenate = 3
    Dim columnToSum As Integer: columnToSum = 4

    lngRow = .Cells(65536, columnToMatch).End(xlUp).Row
    .Cells(columnToMatch).CurrentRegion.Sort key1:=.Cells(columnToMatch), Header:=xlYes

    Do
        If .Cells(lngRow, columnToMatch) = .Cells(lngRow - 1, columnToMatch) Then
            .Cells(lngRow - 1, columnToConcatenate) = .Cells(lngRow - 1, columnToConcatenate) & "; " & .Cells(lngRow, columnToConcatenate)
            .Cells(lngRow - 1, columnToSum) = .Cells(lngRow - 1, columnToSum) + .Cells(lngRow, columnToSum)
            .Rows(lngRow).Delete
        End If

        lngRow = lngRow - 1
    Loop Until lngRow = 1
End With

End Sub

1 个答案:

答案 0 :(得分:0)

我强烈建议您花时间了解这是做什么的。我在代码中做了大量的注释,并在示例代码中进行了更改,以将所有具有相似作业编号的行合并在一起。

我还没有对代码进行测试,但它应该可以完成这项工作。在允许吃掉所有数据之前,请务必先测试它。

IPersistedGrantStore