折叠重复的行条目并计算它们?

时间:2014-06-01 00:18:13

标签: vba duplicate-removal

我认为我尝试做的事情非常基本,但我对VBA来说是全新的,所以我会陷入困境,我发现的答案很接近,但不是完全正确。

我有一个行条目列表,如下所示:

1 4 32 2 4
2 6 33 1 3 
1 4 32 2 4
4 2 30 1 5

请注意,第1行和第3行是重复的。我想只有每个唯一行的一个实例,但我不想删除重复项,我想报告每种类型有多少。每行代表一个库存项目,因此删除重复的条目而不指示总数量将非常糟糕!

所以,我想要的输出看起来像这样,其中第6列计算每个项目的实例总数:

1 4 32 2 4 2
2 6 33 1 3 1
4 2 30 1 5 1

我的数据集大于这5列,它们接近10左右,所以我想将最后一列放在最后,而不是将其硬编码到第6列(即列" F")

更新

我找到了一些可以进行微调的代码,今天早上有用,但是在搞了一些其他的宏之后,当我回到这个时,它告诉我有一个"编译错误,错误的参数数量或无效的属性分配"它似乎对"范围"不满意。为什么工作代码会停止工作?

Sub mcrCombineAndScrubDups2()
    For Each a In range("A1", Cells(Rows.Count, "A").End(xlUp))
        For r = 1 To Cells(Rows.Count, "A").End(xlUp).Row - a.Row
            If a = a.Offset(r, 0) And a.Offset(0, 1) = a.Offset(r, 1) And a.Offset(0, 2) = a.Offset(r, 2) Then
                a.Offset(0, 4) = a.Offset(0, 4) + a.Offset(r, 4)
                a.Offset(r, 0).EntireRow.Delete
                r = r - 1
            End If
        Next r
    Next a
End Sub

1 个答案:

答案 0 :(得分:0)

假设您的数据从名为A1的工作表上的ws1开始,以下代码将删除重复的行。不是通过移动整个表而是删除整行。

Sub deletedupe() 
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim row1 As String
    Dim row2 As String

    i = 1
    j = 1
    k = 1
    Do While Sheets("ws1").Cells(i, 1).Value <> ""
        row1 = ""
        j = 1
        Do While Sheets("ws1").Cells(i, j).Value <> ""
            row1 = row1 & Sheets("ws1").Cells(i, j).Value & " "
            j = j + 1
        Loop
        k = i + 1
        Do While Sheets("ws1").Cells(k, 1).Value <> ""
            row2 = ""
            j = 1
            Do While Sheets("ws1").Cells(k, j).Value <> ""
                row2 = row2 & Sheets("ws1").Cells(k, j).Value & " "
                j = j + 1
            Loop
            If row1 = row2 Then
                Sheets("ws1").Rows(k).EntireRow.Delete
            Else
                k = k + 1
            End If
        Loop
        i = i + 1
    Loop
End Sub