我有一个包含两列的电子表格,格式如下:
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)。
这样做的好处是,如果您更改源数据,您可以刷新数据透视表并重新计算。