Слияние повторяющихся строк в Excel 2003

2

У меня есть таблица с двумя столбцами в формате:

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
DMA57361
источник
Работает отлично. Спасибо, что нашли время, чтобы написать это.
R Слоан
3

Укажите имена столбцов (например, «Заголовок» и «Кол-во»), а затем создайте сводную таблицу с заголовком в заголовках строк и «Кол-во» в значениях (по умолчанию это значение SUM).

Преимущество этого заключается в том, что если вы измените исходные данные, вы можете обновить сводную таблицу и пересчитать ее.

Майк Фицпатрик
источник