Excel VBA: output valori distinti e subtotali
-
05-07-2019 - |
Domanda
Ho i dati di questo modulo:
Category Source Amount
Dues FTW $100
Donations ODP $20
Donations IOI $33
Dues MMK $124
Non esiste un ordinamento. Le categorie sono sconosciute al momento della compilazione. Voglio una macro VBA per scorrere l'intero intervallo, generare un elenco di valori distinti, con i subtotali per ciascuno. Per i dati di cui sopra, sarebbe simile al seguente:
Category Total Amount
Dues $224
Donations $55
Come posso farlo? Inoltre, c'è un modo per far funzionare la macro ogni volta che viene aggiornata la tabella sopra o è necessario che l'utente faccia clic su un pulsante?
Soluzione
Potresti voler usare una funzione Excel integrata per farlo. Il ciclo può richiedere molto tempo ed essere problematico se hai molti valori da percorrere.
Qualcosa di simile al seguente potrebbe iniziare a creare una tabella pivot (da 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
Questo è per i subtotali (anche se preferisco di gran lunga le tabelle pivot) http://msdn.microsoft.com/en-us /library/aa213577(office.11).aspx
EDIT: Rileggo e ho i seguenti pensieri. Imposta la tabella pivot su un foglio separato (senza utilizzare alcun codice), quindi inserisci il seguente codice sul foglio con la tabella pivot in modo che la tabella si aggiorni ogni volta che il foglio viene selezionato.
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
Modifica n. 2 Aggiorna tutte le tabelle pivot sul foglio 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
Il collegamento ha più opzioni su come aggiornare le tabelle pivot nel foglio / cartella di lavoro.