Excel Macro VBA per una Tabella Pivot con Intervallo di Dati Dinamico

CODICE È FUNZIONANTE! GRAZIE PER L’AIUTO!

Sto tentando di creare una dinamica di tabella pivot che lavoro su dati che varia a seconda del numero di righe. Attualmente ho 28,300 righe, ma questo può cambiare di giorno in giorno.

Esempio di formato di dati come segue:

Case Number    Branch      Driver
1342           NYC         Bob
4532           PHL         Jim
7391           CIN         John
8251           SAN         John
7211           SAN         Mary
9121           CLE         John
7424           CIN         John

Esempio di tavolo finito:

Driver    NYC    PHL   CIN   SAN   CLE
Bob       1      0     0     0     0
Jim       0      1     0     0     0    
John      0      0     2     1     1     
Mary      0      0     0     1     0     

Codice come segue:

Sub CreateSummaryReportUsingPivot()
' Use a Pivot Table to create a static summary report
' with model going down the rows and regions across
Dim WSD As Worksheet
Dim PTCache As PivotCache
Dim PT As PivotTable
Dim PRange As Range
Dim FinalRow As Long
Dim FinalCol As Long
Set WSD = Worksheets("PivotTable")

'Name active worksheet as "PivotTable"
 ActiveSheet.Name = "PivotTable"

' Delete any prior pivot tables
For Each PT In WSD.PivotTables
    PT.TableRange2.Clear
Next PT

' Define input area and set up a Pivot Cache
FinalRow = WSD.Cells(Application.Rows.Count, 1).End(xlUp).Row
FinalCol = WSD.Cells(1, Application.Columns.Count). _
    End(xlToLeft).Column
Set PRange = WSD.Cells(1, 1).Resize(FinalRow, FinalCol)
Set PTCache = ActiveWorkbook.PivotCaches.Add(SourceType:= _
    xlDatabase, SourceData:=PRange)

' Create the Pivot Table from the Pivot Cache
Set PT = PTCache.CreatePivotTable(TableDestination:=WSD. _
    Cells(2, FinalCol + 2), TableName:="PivotTable1")

' Turn off updating while building the table
PT.ManualUpdate = True

' Set up the row fields
PT.AddFields RowFields:="Driver", ColumnFields:="Branch"

' Set up the data fields
With PT.PivotFields("Case Number")
    .Orientation = xlDataField
    .Function = xlCount
    .Position = 1
End With

With PT
    .ColumnGrand = False
    .RowGrand = False
    .NullString = "0"
End With

' Calc the pivot table
PT.ManualUpdate = False
PT.ManualUpdate = True

End Sub
  • Dire che questa è realizzata su un file CSV? Quali sono le probabilità che non si dispone di un foglio denominato “tabella Pivot”?
  • Ho pensato che Dim WSD come Foglio di lavoro, quindi Impostare WSD = Worksheets(“tabella Pivot”) creati dinamicamente il Foglio di lavoro denominato tabella Pivot. Non è questo il caso?
  • Rinominare il foglio di lavoro “Foglio1” a “tabella Pivot” manualmente e quindi eseguire la macro, ignora del tutto originale di errore, in modo che il vostro intuito aiutato. Ora sto per mandare in errore la sezione ha commentato come ” Creare la Tabella Pivot dal Pivot Cache. L’errore è “Metodo ” CreatePivotTable’ dell’oggetto ‘PivotCache’ non riuscita”
  • Ho aggiunto ActiveSheet.Name = “tabella Pivot” dopo la creazione dell’istanza le variabili vicino il top.
  • provare pivotcache.creare invece di .aggiungere
  • Grazie Scott! Che fatto. Il codice è funzionante!!

InformationsquelleAutor Liquidgenius | 2012-09-25



2 Replies
  1. 1

    Qualsiasi motivo si sta utilizzando VBA altri di cambiare il numero di righe?

    Se si utilizza Excel 2007 /2010, creare una normale tabella /elenco (Ctrl-L) dai dati originali. Si può dare un nome. Quindi creare una Tabella Pivot e utilizzare il nome della tabella come origine dati. Come si aggiungono righe vostro tavolo espandere e quindi puoi solo aggiornare la Tabella Pivot (F5, o utilizzando VBA).

    Se siete in Excel 2003, è possibile creare dinamiche di nome intervalli. È leggermente più complesso (e molto di più brutto), ma posso camminare attraverso di essa se si sono bloccati su una versione precedente.

    • Sto usando VBA, perché questo è un processo automatico che gira su un file cvs ricevo tutti I giorni via e-mail. Ho eseguito la macro off di uno script che viene innescato da email le regole.Sto usando Excel 2011 per Mac. Ha VBA 14.0 in esso.
    • Se posso ottenere questa macro mi permettono di automatizzare completamente il processo di raccolta dei dati e sono aggiornati quotidianamente con le informazioni che viene utilizzato come base per visual analytics nel Tableau.
    • Ovvio, ma è il foglio di lavoro denominato esattamente tabella Pivot? Non Sheets(“Tabella Pivot”).Attivare portare il foglio?
    • Risposta breve, No. La macro non riesce quando ho impostato WSD al nome “tabella Pivot”.
    • La mia impressione di questo codice è stato che doveva creare il foglio “tabella Pivot” in modo dinamico, ma non è riuscito per qualche motivo.
    • Un vostro diritto… il foglio di lavoro deve essere manualmente rinominato “tabella Pivot” Ora sto per mandare in errore la sezione ha commentato come ” Creare la Tabella Pivot dal Pivot Cache. L’errore è “Metodo ” CreatePivotTable’ dell’oggetto ‘PivotCache’ non riuscita”

  2. 2

    Hanno cambiato il modello di oggetto per PivotCaches. Il metodo di cui avete bisogno nel 2007-2010 (che uso VBA versione 7 invece della versione 6) è

     PivotCaches.Create

Lascia un commento