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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top