在 Excel 2003 中合并重复行

在 Excel 2003 中合并重复行

我有一个包含两列的电子表格,格式如下:

title A   300
title B   345
title A   25
title C   105

我想合并标题重复的行,同时计算数值总和,因此上面的例子将变成:

title A   325
title B   345
title C   105

我正在使用 Excel 2003。

答案1

我认为这个需要一个快速宏,试试这个(在复制出现问题时,请谨慎处理您的数据!我已在 Excel 2003 上对此进行了测试,并且对我有用,但一如既往,最好谨慎行事!)。

首先,它将选择全部的当前处于活动状态的工作表并按A列排序。然后,它会查找整个A列以查找匹配的内容(100% 匹配,这也区分大小写),并在列中添加它们的值B并删除重复的行。除此以外的列中重复行的数据B将丢失。

我在代码中添加了一些NOTE注释,提示了最容易调整的部分。

Sub SortAndMerge()
    'Sort first
    'NOTE: Change this select if you wish the sort to be more precise
    Cells.Select
    Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

    'And then merge
    Range("A1").Select

    'Keep going until we run out of entires in the first column
    Do While ActiveCell.Value <> 0

        'Loop while the row below matches
        Do While ActiveCell.Offset(1, 0).Value = ActiveCell.Value
            'The value on this row += the value on the next row
            'NOTE: Changing the 1 in the second places on *all three* of these
            '      offsets will change the row being merged (A+1=B, A+2=C, etc)
            ActiveCell.Offset(0, 1).Value = ActiveCell.Offset(0, 1).Value _
                                            + ActiveCell.Offset(1, 1).Value

            'Delete the duplicate row
            ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select
            Selection.Delete Shift:=xlUp

            'Reselect the top row for this group
            ActiveCell.Offset(-1, 0).Select
        Loop

        'Step to next row
        ActiveCell.Offset(1, 0).Select
    Loop
End Sub

答案2

为列命名(例如标题和数量),然后创建一个数据透视表行标签中含有标题,值中含有数量(默认为 SUM)。

这样做的好处是,如果您更改源数据,您可以刷新数据透视表并重新计算。

相关内容