Excel VBA: вывод отличительных значений и итоговых значений

У меня есть данные этой формы:

Category Source Amount Dues FTW $100 Donations ODP $20 Donations IOI $33 Dues MMK $124 

Нет порядка сортировки. Категории во время компиляции неизвестны. Я хочу, чтобы макрос VBA перебирал диапазон, выводил список различных значений с промежуточными итогами для каждого. Для вышеуказанных данных это будет выглядеть так:

 Category Total Amount Dues $224 Donations $55 

Как я могу это сделать? Кроме того, есть ли способ сделать макрос запуска каждый раз, когда приведенная выше таблица обновлена, или необходимо, чтобы пользователь нажал кнопку?

    Для этого вы можете использовать встроенную функцию Excel. Зацикливание может занять много времени и быть проблематичным, если у вас есть много значений для прокрутки.

    Что-то вроде следующего может помочь вам начать создание сводной таблицы (с http://www.ozgrid.com/News/pivot-tables.htm )

     Sub MakeTable() Dim Pt As PivotTable Dim strField As String 'Pass heading to a String variable strField = Selection.Cells(1, 1).Text 'Name the list range Range(Selection, Selection.End(xlDown)).Name = "Items" 'Create the Pivot Table based off our named list range. 'TableDestination:="" will force it onto a new sheet ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _ SourceData:="=Items").CreatePivotTable TableDestination:="", _ TableName:="ItemList" 'Set a Pivot Table variable to our new Pivot Table Set Pt = ActiveSheet.PivotTables("ItemList") 'Place the Pivot Table to Start from A3 on the new sheet ActiveSheet.PivotTableWizard TableDestination:=Cells(3, 1) 'Move the list heading to the Row Field Pt.AddFields RowFields:=strField 'Move the list heading to the Data Field Pt.PivotFields(strField).Orientation = xlDataField End Sub 

    Это для промежуточных результатов (хотя я предпочитаю сводные таблицы) http://msdn.microsoft.com/en-us/library/aa213577(office.11).aspx


    EDIT: Я перечитываю и имею следующие мысли. Настройте сводную таблицу на отдельном листе (без использования какого-либо кода), затем поместите следующий код на листе, который имеет сводную таблицу, чтобы таблица обновлялась каждый раз, когда выбран лист.

      Private Sub Worksheet_Activate() Dim pt As PivotTable 'change "MiPivot" to the name of your pivot table Set pt = ActiveSheet.PivotTables("MyPivot") pt.RefreshTable End Sub 

    Изменить # 2 Обновить все сводные таблицы на листе http://www.ozgrid.com/VBA/pivot-table-refresh.htm

     Private Sub Worksheet_Activate() Dim pt As PivotTable For Each pt In ActiveSheet.PivotTables pt.RefreshTable Next pt End Sub 

    Ссылка имеет несколько опций по обновлению сводных таблиц в листе / книге.

    Давайте будем гением компьютера.