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
Как я могу это сделать? Кроме того, есть ли способ запускать макрос каждый раз, когда обновляется таблица выше, или пользователю необходимо нажать кнопку?
1 ответ
Вы можете использовать встроенную функцию 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
РЕДАКТИРОВАТЬ: я перечитал и имею следующие мысли. Настройте сводную таблицу на отдельном листе (без использования какого-либо кода), а затем поместите следующий код на лист с сводной таблицей, чтобы таблица обновлялась при каждом выборе листа.
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
Ссылка имеет несколько опций для обновления сводных таблиц в листе / книге.