vba - 对重复行求和,然后删除所有重复项

标签 vba excel

我有一个 Excel 工作表,其中某些行可能包含与其他行相同的数据,但一列除外。我需要一个宏来对该列中的所有值求和并删除所有重复项,第一个值除外,其中包含其余值的总和。例如:

   A   B   C   D
1  a   b   c   d
2  n   j   i   o
3  a   b   c   p
4  v   y   e   b
5  a   b   c   m
6  .   .   .   .

在这种情况下,代码必须删除第 3 行和第 5 行(因为它们是第 1 行的“重复项”),并用 d+p+m 替换第 1 行的 D 列。我设法想出了以下代码:

For j = 1 To Range("A1").End(xlDown).Row
    For i = j + 1 To Range("A1").End(xlDown).Row
        If Cells(j, 1).value = Cells(i, 1).value And Cells(j, 2).value = Cells(i, 2).value And Cells(j, 3).value = Cells(i, 3).value Then
            Cells(j, 6) = Cells(i, 6).value + Cells(j, 6).value
            Rows(i).Delete Shift:=xlUp
            i = i - 1
        End If
    Next i
Next j

但正如您可能已经注意到的那样,这是非常低效且基础的。还有更好的想法吗?

最佳答案

这是一个简单的代码:

Sub remdup()
    Dim ws As Worksheet
    Dim lastrw As Long
    Set ws = ActiveSheet
    lastrw = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
    ws.Range("E1:E" & lastrw).FormulaR1C1 = "=SUMIFs(C[-1],C[-4],RC[-4],C[-3],RC[-3],C[-2],RC[-2])"
    ws.Range("D1:D" & lastrw).Value = ws.Range("E1:E" & lastrw).Value
    ws.Range("E1:E" & lastrw).ClearContents
    With ws.Range("A1:D" & lastrw)
        .Value = .Value
        .RemoveDuplicates Array(1, 2, 3), xlNo
    End With

End Sub

关于vba - 对重复行求和,然后删除所有重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35611548/

相关文章:

vba - 如何在vba中将文本文件读入数组

excel - 如何在vba中的另一个函数中使用一个函数的变量?

vba - VBA(Excel)中的变量除以数字范围

Excel VBA 如何使用超链接在工作表之间将信息从一个单元格复制到另一个单元格

vba - 自动计算与单元格属性相关的 Excel VBA UDF

vba - 在vba中将%符号转换为字符串

excel - 使用 SUMIF 进行图表和分组?

vba split(字符串, "\\""Excel

excel - 如何在 excel VBA 用户窗体中显示 dwg 文件的缩略图

Excel - 多列中的值的总和