Mesclar linhas duplicadas no Excel 2003

2

Eu tenho uma planilha com duas colunas no formato:

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

Eu gostaria de mesclar as linhas com títulos duplicados e, ao mesmo tempo, totalizar o valor numérico para que o exemplo acima se tornasse:

title A   325
title B   345
title C   105

Estou usando o Excel 2003.

    
por R Sloan 04.01.2011 / 10:51

2 respostas

1

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
    
por 04.01.2011 / 11:10
3

Dê seus nomes de colunas (como Título e Qtde) e, em seguida, crie uma Tabela Dinâmica com Título nos rótulos de linha e Qtd nos Valores (o padrão deverá ser SUM).

Isso tem a vantagem de que, se você alterar seus dados de origem, poderá atualizar a tabela dinâmica e fazer com que ela seja recalculada.

    
por 04.01.2011 / 12:16