Eu acho que isso garante uma macro rápida, experimente (em uma cópia dos seus dados em caso de problemas! Eu testei isso no Excel 2003 aqui, e funciona para mim, mas como sempre é melhor ser cauteloso!).
Primeiro, ele selecionará a planilha inteira que você tem atualmente ativa e classificará pela coluna A
. Em seguida, ele examinará a coluna A
inteira para fins de correspondência diferente (correspondência de 100%, isso também diferencia maiúsculas de minúsculas) e adicionará seus valores na coluna B
e removerá as linhas duplicadas. Os dados nas linhas duplicadas em colunas diferentes de B
serão perdidos.
Eu adicionei alguns NOTE
comentários no código com dicas sobre os bits que são mais fáceis de ajustar.
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