Condividi tramite

Macro per tabella Pivot

Anonimo
2024-03-01T22:29:46+00:00

Buonasera,

ho una serie di file con una tabella con gli stessi campi/colonne ma a righe variabili.

Dovrei redigere una tabella pivot su ogni file, così ho pensato di registrare una macro (sotto riportata).

Richiedo due indicazioni:

  1. sul primo file funziona correttamente ma nei successivi viene realizzata una tabella pivot con lo stessa seleione d'origine. Invece la macro dovrebbe adattare la selezione in funzione delle righe del file. Come posso modificare il codice ?
  2. qual è il modo corretto per metterla a disposizione temporaneamente, richiamarla, in più fogli di lavoro ? Ho provato ad inserirla a salvarla "Tutte le cartelle di lavoro" e inserirla nella barra di accesso rapido

Grazie per la collaborazione

Sub Macro1()
'
' Macro1 Macro
'

'
Range("A1:C15").Select
Application.CutCopyMode = False
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Foglio1!R1C1:R15C3", Version:=8).CreatePivotTable TableDestination:= _
"Foglio2!R3C1", TableName:="Tabella pivot1", DefaultVersion:=8
Sheets("Foglio2").Select
Cells(3, 1).Select
With ActiveSheet.PivotTables("Tabella pivot1")
.ColumnGrand = True
.HasAutoFormat = True
.DisplayErrorString = False
.DisplayNullString = True
.EnableDrilldown = True
.ErrorString = ""
.MergeLabels = False
.NullString = ""
.PageFieldOrder = 2
.PageFieldWrapCount = 0
.PreserveFormatting = True
.RowGrand = True
.SaveData = True
.PrintTitles = False
.RepeatItemsOnEachPrintedPage = True
.TotalsAnnotation = False
.CompactRowIndent = 1
.InGridDropZones = False
.DisplayFieldCaptions = True
.DisplayMemberPropertyTooltips = False
.DisplayContextTooltips = True
.ShowDrillIndicators = True
.PrintDrillIndicators = False
.AllowMultipleFilters = False
.SortUsingCustomLists = True
.FieldListSortAscending = False
.ShowValuesRow = False
.CalculatedMembersInFilters = False
.RowAxisLayout xlCompactRow
End With
With ActiveSheet.PivotTables("Tabella pivot1").PivotCache
.RefreshOnFileOpen = False
.MissingItemsLimit = xlMissingItemsDefault
End With
ActiveSheet.PivotTables("Tabella pivot1").RepeatAllLabels xlRepeatLabels
With ActiveSheet.PivotTables("Tabella pivot1").PivotFields("Colore")
.Orientation = xlRowField
.Position = 1
End With
ActiveSheet.PivotTables("Tabella pivot1").AddDataField ActiveSheet.PivotTables( _
"Tabella pivot1").PivotFields("Importo"), "Somma di Importo", xlSum
Range("B4:B8").Select
With ActiveSheet.PivotTables("Tabella pivot1").PivotFields("Somma di Importo")
.NumberFormat = "#.##0,00"
End With
End Sub

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

3 risposte

Ordina per: Più utili
  1. Anonimo
    2024-03-03T13:53:30+00:00

    Ciao AndreaBuratti2,

    Sfortunatamente, non ho ulteriori informazioni sulla risoluzione dei problemi da offrire.

    Ci sono molti utenti esperti attivi sul forum e spero che qualcun altro possa offrire ulteriori approfondimenti sul tuo problema.

    Grazie Fatai

    Questa risposta è stata tradotta automaticamente. Di conseguenza, potrebbero esserci errori grammaticali o espressioni strane.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Eleuterio Tedeschi 18,590 Punti di reputazione Moderatore volontario
    2024-03-02T01:47:26+00:00

    Richiedo due indicazioni:

    1. sul primo file funziona correttamente ma nei successivi viene realizzata una tabella pivot con lo stessa seleione d'origine. Invece la macro dovrebbe adattare la selezione in funzione delle righe del file. Come posso modificare il codice ?

    Qui devi cambiare gli intervalli che ti ho evidenziato:
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= "Foglio1!R1C1:R15C3", Version:=8).CreatePivotTable TableDestination:= "Foglio2!R3C1", TableName:="Tabella pivot1", DefaultVersion:=8

    dove il primo è l'intervallo di dati ed il secondo dove deve essere creata.

    1. qual è il modo corretto per metterla a disposizione temporaneamente, richiamarla, in più fogli di lavoro ? Ho provato ad inserirla a salvarla "Tutte le cartelle di lavoro" e inserirla nella barra di accesso rapido

    La Sub va in nel modulo generico, ma se la vuoi richiamare per più tabelle diverse devi passargli i parametri:

    Sub CreaPivot(ByVal strData As String, ByVal strDest As String)

    e la riga di prima diventa:
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= strData, Version:=8).CreatePivotTable TableDestination:= strDest, TableName:="Tabella pivot1", DefaultVersion:=8

    Ciao.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2024-03-01T23:10:29+00:00

    Ciao AndreaBuratti2,

    Sono un consulente indipendente, che cerca di aiutare gli altri utenti della community con la mia esperienza con i prodotti Microsoft. Tieni presente che sono un utente come te e non lavoro direttamente per Microsoft.

    In base alla mia esperienza personale, la regolazione dinamica della selezione in base ai dati in ciascun file può essere ottenuta determinando l'ultima riga e colonna dell'intervallo di dati a livello di codice. In questo modo, non è necessario codificare l'intervallo. Ecco come puoi modificare il tuo codice per ottenere questo risultato:

    Sub CreatePivotTable() Dim wsSource come foglio di lavoro Dim wsNuovo come foglio di lavoro Quota pt come tabella pivot Dim pc come PivotCache Dim SourceRange As Range Dim LastRow Finché Dim LastColumn As Long Attenua PivotRange come intervallo

    ' Impostare il foglio di lavoro di origine Imposta wsSource = ThisWorkbook.Sheets("Foglio1")

    ' Trova l'ultima riga e l'ultima colonna di dati LastRow = wsSource.Cells(wsSource.Rows.Count, "A"). Fine(xlUp). Fila LastColumn = wsSource.Cells(1, wsSource.Columns.Count). Fine(xlToLeft). Colonna

    ' Definire l'intervallo di origine Impostare SourceRange = wsSource.Range("A1"). Ridimensiona(LastRow, LastColumn)

    ' Creare un nuovo foglio di lavoro Imposta wsNew = ThisWorkbook.Sheets.Add

    ' Creare una cache pivot Set pc = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SourceRange)

    ' Creare la tabella pivot Set pt = wsNew.PivotTables.Add(PivotCache:=pc, TableDestination:=wsNew.Range("A1"), TableName:="PivotTable1")

    ' Specificare i campi di riga e colonna Con pt . PivotFields("Colore"). Orientamento = xlRowField . PivotFields("Importo"). Orientamento = xlDataField Termina con Fine sottomarino

    Questo codice regolerà dinamicamente l'intervallo in base ai dati in ogni file.

    1. Per rendere questa macro temporaneamente disponibile in più fogli di lavoro, è possibile memorizzarla in un modulo all'interno della cartella di lavoro di Excel. Procedere come descritto di seguito:
    • Premere ALT + F11 per aprire l'editor di Visual Basic, Applications Edition (VBA).
    • Nella finestra Esplora progetti, individua il progetto della cartella di lavoro.
    • Fai clic con il pulsante destro del mouse sul progetto della cartella di lavoro e scegli Inserisci > modulo.
    • Incolla il codice della macro nella finestra del modulo.
    • Chiudi l'editor VBA.

    A questo punto, la macro sarà disponibile per tutti i fogli di lavoro all'interno della cartella di lavoro. Puoi eseguirlo premendo ALT + F8 per aprire la finestra di dialogo "Esegui macro" e selezionando la tua macro. In alternativa, è possibile assegnare la macro a un pulsante o a una scorciatoia da tastiera per un facile accesso.

    Apprezzerei il tuo feedback

    Cordiali saluti Fatai

    Questa risposta è stata tradotta automaticamente. Di conseguenza, potrebbero esserci errori grammaticali o espressioni strane.

    La risposta è stata utile?

    0 commenti Nessun commento