Excel VBA宏基于多个列删除重复行并将另一列相加

时间:2018-03-18 13:25:14

标签: excel-vba vba excel

我有一张Excel表格。它在A到J列中有数据。

我想写一个宏,它会根据A到I列找到重复的行。

这意味着如果所有A到I列中的值都重复,则应将两行视为重复行。

重复的行中,宏应该

1)在第J列中添加值。列J包含数字。

2)保留一行并删除其副本。

3)在保留的行中,使用在步骤1中计算的总和更新J列中的值。

请让我知道怎么做。

1 个答案:

答案 0 :(得分:1)

将总和收集到一个数组中。

Option Explicit

Sub dedupeSumK()
    Dim i As Long, lrK As Long, tmp As Variant, vals As Variant

    With Worksheets(1)
        tmp = .Range(.Cells(2, "A"), .Cells(Rows.Count, "K").End(xlUp)).Value2
        ReDim vals(LBound(tmp, 1) To UBound(tmp, 1), 1 To 1)
        For i = LBound(vals, 1) To UBound(vals, 1)
            vals(i, 1) = Application.SumIfs(.Columns(11), _
                                            .Columns(1), tmp(i, 1), _
                                            .Columns(2), tmp(i, 2), _
                                            .Columns(3), tmp(i, 3), _
                                            .Columns(4), tmp(i, 4), _
                                            .Columns(5), tmp(i, 5), _
                                            .Columns(6), tmp(i, 6), _
                                            .Columns(7), tmp(i, 7), _
                                            .Columns(8), tmp(i, 8), _
                                            .Columns(9), tmp(i, 9), _
                                            .Columns(10), tmp(i, 10))
        Next i
        .Cells(2, "K").Resize(UBound(vals, 1), UBound(vals, 2)) = vals

        With .Cells(1, "A").CurrentRegion
            .RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), Header:=xlYes
        End With
    End With

End Sub