Excel VBA: вывод различных значений и промежуточных итогов - PullRequest
2 голосов
/ 22 октября 2009

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

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

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

Category      Total Amount
Dues          $224
Donations     $55

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

1 Ответ

2 голосов
/ 22 октября 2009

Вы можете использовать встроенную функцию 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

У ссылки есть несколько опций для обновления сводных таблиц в листе / рабочей книге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...