Excel - макрос для группировки по столбцу и сумме значений
Microsoft Office Software включает в себя Microsoft Excel, который представляет собой приложение для работы с электронными таблицами с графическими таблицами, вычислениями, языком макросов, называемым VBA (Visual Basics for Applications) и сводными таблицами. Сводная таблица используется для отображения данных; он распознает и суммирует эти данные для получения указанных результатов. Макрос представляет собой список команд или действий для ускорения длинных данных или повторяющихся задач в Excel Office Software; это можно запустить всякий раз, когда вам нужно выполнить задачу. Он принимает значения, выполняет требуемую операцию и возвращает значение соответственно. Если вы хотите написать макрос для группировки по столбцу и сумме, просто запустите макрос, используя соответствующие команды.
вопрос
Мне нужно написать макрос для следующего примера:
Кол-во Длина A 1 100 A 1 100 B 2 200 B 1 100 B 5 100 C 4 200 C 2 100 C 1 200 C 3 100
По сути, я хочу сгруппировать по столбцу A (т. Е. Item) и столбцу C (т. Е. По длине), а также хочу добавить сумму каждого изменения длины для элемента. В этом случае результат на новом листе будет таким, как показано ниже:
Кол-во Длина A 2 100 B 2 200 B 6 100 C 5 200 C 5 100
Надеюсь, это имеет смысл.
Может кто-нибудь помочь мне написать макрос Excel для этого, пожалуйста?
Решение
Попробуй это
Предположение:
- 1. Когда вы запускаете макрос, лист, из которого копируются данные, является активным листом.
- 2. Пустая ячейка в столбце A указывает на конец данных
- 3. Вы хотите вставить на лист 3 (исправить в макросе, если это не так)
Sub consolidateData () Dim lRow As Long Dim ItemRow1, ItemRow2 As String Dim lengthRow1, lengthRow2 As String Columns ("A: C"). Выберите Selection.Copy Sheets ("Sheet3"). Выберите диапазон ("A1"). Выберите ActiveSheet . Вставить ячейки. Выбрать Selection.Sort _ Key1: = Range ("A2"), Order1: = xlAscending, _ Key2: = Range ("C2"), Order2: = xlDescending, _ Header: = xlYes, OrderCustom: = 1, _ MatchCase: = False, ориентация: = xlTopToBottom, _ DataOption1: = xlSortNormal lRow = 2 Do While (Cells (lRow, 1) "") ItemRow1 = Клетки (lRow, "A") ItemRow2 = Клетки (lRow + 1, «A») lengthRow1 = ячейки (lRow, «C») lengthRow2 = ячейки (lRow + 1, «C») If ((ItemRow1 = ItemRow2) и (lengthRow1 = lengthRow2)) тогда ячейки (lRow, «B») = Ячейки (lRow, "B") + Ячейки (lRow + 1, "B") Rows (lRow + 1). Удалите остальное lRow = lRow + 1 End If Loop End Sub
Заметка
Спасибо rizvisa1 за этот совет на форуме.