Note: The other languages of the website are Google-translated. Back to English

Come filtrare la tabella pivot in base a un valore di cella specifico in Excel?

Normalmente, stiamo filtrando i dati in una tabella pivot selezionando gli elementi nell'elenco a discesa come mostrato nello screenshot seguente. In realtà, puoi filtrare una tabella pivot in base al valore in una cella specifica. Il metodo VBA in questo articolo ti aiuterà a risolvere il problema.

Filtra la tabella pivot in base a un valore di cella specifico con codice VBA


Filtra la tabella pivot in base a un valore di cella specifico con codice VBA

Il seguente codice VBA può aiutarti a filtrare una tabella pivot in base a un valore di cella specifico in Excel. Si prega di fare quanto segue.

1. Inserisci in anticipo un valore su cui filtrerai la tabella pivot in base a una cella (qui seleziono la cella H6).

2. Aprire il foglio di lavoro che contiene la tabella pivot che filtrerai in base al valore della cella. Quindi fare clic con il pulsante destro del mouse sulla scheda del foglio e selezionare Visualizza codice dal menu di scelta rapida. Vedi screenshot:

3. In apertura Microsoft Visual Basic, Applications Edition finestra, copia sotto il codice VBA nella finestra del codice.

Codice VBA: filtra la tabella pivot in base al valore della cella

Private Sub Worksheet_Change(ByVal Target As Range)
'Update by Extendoffice 20180702
    Dim xPTable As PivotTable
    Dim xPFile As PivotField
    Dim xStr As String
    On Error Resume Next
    If Intersect(Target, Range("H6:H7")) Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    Set xPTable = Worksheets("Sheet1").PivotTables("PivotTable2")
    Set xPFile = xPTable.PivotFields("Category")
    xStr = Target.Text
    xPFile.ClearAllFilters
    xPFile.CurrentPage = xStr
    Application.ScreenUpdating = True
End Sub

Note: Nel codice,

1) "Sheet1"È il nome del foglio di lavoro.
2) "Tabella pivot 2"È il nome della tabella pivot.
3) Il campo di filtro nella tabella pivot si chiama "Categoria".
4) Il valore che vuoi filtrare nella tabella pivot viene inserito nella cella H6.
Puoi modificare i valori delle variabili sopra di cui hai bisogno.

4. premi il altro + Q i tasti per chiudere il file Microsoft Visual Basic, Applications Edition finestra.

Quindi la tabella pivot filtra in base al valore nella cella H6 come mostrato nell'immagine sottostante:

Puoi cambiare il valore della cella con gli altri di cui hai bisogno.

Note:: I valori digitati nella cella H6 devono corrispondere esattamente ai valori nell'elenco a discesa Categoria della tabella pivot.


Articoli correlati:


I migliori strumenti per la produttività in ufficio

Kutools per Excel risolve la maggior parte dei tuoi problemi e aumenta la tua produttività dell'80%

  • Riutilizzo: Inserisci rapidamente formule complesse, grafici e tutto ciò che hai usato prima; Crittografa celle con password; Crea mailing list e invia email ...
  • Bar Super Formula (modifica facilmente più righe di testo e formula); Layout di lettura (leggi e modifica facilmente un gran numero di celle); Incolla su intervallo filtrato...
  • Unisci celle / righe / colonne senza perdere dati; Contenuto delle celle divise; Combina righe / colonne duplicate... Impedisci celle duplicate; Confronta intervalli...
  • Seleziona Duplica o Unico Righe; Seleziona Righe vuote (tutte le celle sono vuote); Super Find e Fuzzy Find in molte cartelle di lavoro; Selezione casuale ...
  • Copia esatta Più celle senza modificare il riferimento della formula; Riferimenti di creazione automatica a più fogli; Inserisci punti elenco, Caselle di controllo e altro ...
  • Estrai testo, Aggiungi testo, Rimuovi per posizione, Rimuovi spazio; Creare e stampare totali parziali di paging; Converti contenuto e commenti tra celle...
  • Super filtro (salva e applica schemi di filtri ad altri fogli); Ordinamento avanzato per mese / settimana / giorno, frequenza e altro; Filtro speciale in grassetto, corsivo ...
  • Combina cartelle di lavoro e fogli di lavoro; Unisci tabelle in base a colonne chiave; Suddividi i dati in più fogli; Conversione in batch xls, xlsx e PDF...
  • Più di 300 potenti funzionalità. Supporta Office/Excel 2007-2021 e 365. Supporta tutte le lingue. Facile implementazione nella tua azienda o organizzazione. Funzionalità complete Prova gratuita di 30 giorni. Garanzia di rimborso di 60 giorni.
scheda kte 201905

Scheda Office porta l'interfaccia a schede a Office e semplifica notevolmente il lavoro

  • Abilita la modifica e la lettura a schede in Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
  • Apri e crea più documenti in nuove schede della stessa finestra, piuttosto che in nuove finestre.
  • Aumenta la produttività del 50% e riduce ogni giorno centinaia di clic del mouse!
fondo officetab
Commenti (23)
Ancora nessuna valutazione. Puoi essere il primo a votare!
Questo commento è stato fatto dal moderatore sul sito
Usando questo codice (ovviamente aggiornato per le mie variabili), quando si cambia il campo, il filtro cambia momentaneamente in quello corretto, quindi si cancella quasi immediatamente. Cercando di capire perché lo sta facendo (chiedendo se ha qualcosa a che fare con ClearAllFilters alla fine del sub?)
Questo commento è stato fatto dal moderatore sul sito
Come lo faresti con un filtro di rapporto che ha una gerarchia?
Questo commento è stato fatto dal moderatore sul sito
Ehi! Grazie per la tua macro

Stavo cercando di usarlo per più di una tabella pivot nella stessa pagina, ma non funziona. L'ho scritto così:

Private Sub Worksheet_Change (ByVal Target As Range)
Dim xPTable1 come tabella pivot
Dim xPFile1 come campo pivot
Dim xStr1 come stringa
On Error Resume Next
Se Intersect(Target, Range("D7")) non è nulla, allora esci da Sub
Application.ScreenUpdating = False
Imposta xPTable1 = Fogli di lavoro ("BUSCADOR"). Tabelle pivot ("PV_ETAPA1")
Imposta xPFile1 = xPTable1.PivotFields ("ETAPA1")
xStr1 = Destinazione.Testo
xPFile1.ClearAllFilters
xPFile1.PaginaCorrente = xStr1
Application.ScreenUpdating = True

Dim xPTable2 come tabella pivot
Dim xPFile2 come campo pivot
Dim xStr2 come stringa
On Error Resume Next
Se Intersect(Target, Range("G7")) non è nulla, allora Exit Sub
Application.ScreenUpdating = False
Imposta xPTable2 = Fogli di lavoro ("BUSCADOR"). Tabelle pivot ("PV_ETAPA2")
Imposta xPFile2 = xPTable2.PivotFields ("ETAPA2")
xStr2 = Destinazione.Testo
xPFile2.ClearAllFilters
xPFile2.PaginaCorrente = xStr2
Application.ScreenUpdating = True

End Sub

Forse puoi aiutarmi!

Grazie in anticipo!
Questo commento è stato fatto dal moderatore sul sito
Hi


grazie per la Macro


Sto provando la stessa cosa ma non riesco a farlo funzionare su 2 tabelle. entrambi stanno guardando la stessa cella solo 2 diverse tabelle pivot


Grazie
Questo commento è stato fatto dal moderatore sul sito
Devi cambiare il nome della tabella pivot. Ogni tabella pivot ha un nome diverso. per ottenerlo, fai clic con il pulsante destro del mouse sul pivot e seleziona le impostazioni della tabella pivot, il nome sarà in alto
Questo commento è stato fatto dal moderatore sul sito
Buongiorno,

Je ne comprends pas comment ajouter le nom du second TCD dans la macro pour que cela fonctionne sur les deux.
Pourriez-vous m'aider?

grazie
Questo commento è stato fatto dal moderatore sul sito
Ciao per qualche motivo, questa macro dopo essere entrata nella pagina di base visiva, non viene visualizzata affatto. Non riesco ad abilitare/eseguire questa macro, ho controllato tutte le impostazioni del centro di fiducia, ma non succede nulla, per favore aiutami
Questo commento è stato fatto dal moderatore sul sito
Ciao, non riesco a farlo funzionare. La cella a cui voglio fare riferimento viene estratta da una formula: sarebbe questo il motivo per cui il filtro non riesce a trovarla poiché sta guardando la formula piuttosto che il valore restituito dalla formula? Grazie in anticipo Heather McDonagh
Questo commento è stato fatto dal moderatore sul sito
Ciao Heather, hai trovato una soluzione. Ho lo stesso problema.
Questo commento è stato fatto dal moderatore sul sito
Sono stato in grado di modificare/filtrare 3 diversi pivot che si trovano nella stessa scheda. Ho anche aggiunto una riga nel mio set di dati "Nessun dato trovato", altrimenti ha lasciato il filtro su "TUTTI" che non volevo. Quanto sopra è stato di grande aiuto per farmi guadagnare complimenti con la direzione, quindi ho voluto condividere. Nota che (Tutto) fa distinzione tra maiuscole e minuscole mi ci è voluto un po' per capirlo.
Private Sub Worksheet_Change (ByVal Target As Range)
'test
Dim xPTable come tabella pivot
Dim xPFile come campo pivot
Dim xStr come stringa

Dim x2PTable come tabella pivot
Dim x2PFile come campo pivot
Dim x2Str come stringa

Dim x3PTable come tabella pivot
Dim x3PFile come campo pivot
Dim x3Str come stringa

On Error Resume Next
Se Intersect(Target, Range("a2:e2")) non è nulla, allora Exit Sub

Application.ScreenUpdating = False

'tbl-1
Imposta xPTable = Fogli di lavoro ("Grafica"). Tabelle pivot ("Tabella pivot 1")
Imposta xPFile = xPTable.PivotFields("Reparto MR - Dipartimento")
xStr = Target.Text
xPFile.ClearAllFilters
xPFile.PaginaCorrente = xStr
Se xPFile.CurrentPage = "(Tutti)" Allora xPFile.CurrentPage = "Nessun dato trovato"

'tbl-2
Imposta x2PTable = Fogli di lavoro ("Grafica"). Tabelle pivot ("Tabella pivot 2")
Imposta x2PFile = x2PTable.PivotFields ("Reparto MR - Reparto")
x2Str = Target.Text
x2PFile.ClearAllFilters
x2PFile.PaginaCorrente = x2Str
Se x2PFile.CurrentPage = "(Tutti)" Allora x2PFile.CurrentPage = "Nessun dato trovato"

'tbl-3
Imposta x3PTable = Fogli di lavoro ("Grafica"). Tabelle pivot ("Tabella pivot 3")
Imposta x3PFile = x3PTable.PivotFields ("Reparto MR - Reparto")
x3Str = Target.Text
x3PFile.ClearAllFilters
x3PFile.PaginaCorrente = x3Str
Se x3PFile.CurrentPage = "(Tutti)" Allora x3PFile.CurrentPage = "Nessun dato trovato"

Application.ScreenUpdating = True

End Sub
Questo commento è stato fatto dal moderatore sul sito
È possibile con i fogli di Google? Se é cosi, come?
Questo commento è stato fatto dal moderatore sul sito
Fogli Google non richiederà alcuna tabella pivot. è possibile eseguire direttamente tramite la funzione filtro
Questo commento è stato fatto dal moderatore sul sito
Vorrei utilizzare più codici di modifica del foglio di lavoro nello stesso foglio di lavoro. Come farlo? Il mio codice è il seguente:
Private Sub Worksheet_Change (ByVal Target As Range)
'Filtro tabella pivot in base al valore della cella
Dim xPTable come tabella pivot
Dim xPFile come campo pivot
Dim xStr come stringa
On Error Resume Next
Se Intersect(Target, Range("D20:D21")) non è nulla, allora esci da Sub
Application.ScreenUpdating = False
Imposta xPTable = Fogli di lavoro ("Foglio 1"). Tabelle pivot ("Tabella pivot 2")
Imposta xPFile = xPTable.PivotFields ("Designazione")
xStr = Target.Text
xPFile.ClearAllFilters
xPFile.PaginaCorrente = xStr
Application.ScreenUpdating = True
End Sub

Private Sub Worksheet_Change2 (ByVal Target As Range)
'Filtro tabella pivot basato sul valore della cella 2
Dim xPTable come tabella pivot
Dim xPFile come campo pivot
Dim xStr come stringa
On Error Resume Next
Se Intersect(Target, Range("H20:H21")) non è nulla, allora esci da Sub
Application.ScreenUpdating = False
Imposta xPTable = Fogli di lavoro ("Foglio 1"). Tabelle pivot ("Tabella pivot 2")
Imposta xPFile = xPTable.PivotFields ("Offerta")
xStr = Target.Text
xPFile.ClearAllFilters
xPFile.PaginaCorrente = xStr
Application.ScreenUpdating = True
End Sub
Questo commento è stato fatto dal moderatore sul sito
Olá, gostaria de saber se quisesse filtrar mais de uma categoria como poderia ser?
Questo commento è stato fatto dal moderatore sul sito
Cosa succede se voglio collegare la cella di selezione a una scheda diversa? Questo è il mio codice finora
Private Sub Worksheet_Change (ByVal Target As Range)
Dim xPTable1 come tabella pivot
Dim xPFile1 come campo pivot
Dim xStr1 come stringa
On Error Resume Next
Se Intersect(Target, Range("B1")) non è nulla, allora Exit Sub
Application.ScreenUpdating = False
Imposta xPTable1 = Fogli di lavoro ("PIVOTS SM_SKU"). Tabelle pivot ("Tabella pivot 1")
Imposta xPFile1 = xPTable1.PivotFields ("Geografia")
xStr1 = Destinazione.Testo
xPFile1.ClearAllFilters
xPFile1.PaginaCorrente = xStr1
Application.ScreenUpdating = True

Dim xPTable2 come tabella pivot
Dim xPFile2 come campo pivot
Dim xStr2 come stringa
On Error Resume Next
Se Intersect(Target, Range("B1")) non è nulla, allora Exit Sub
Application.ScreenUpdating = False
Imposta xPTable2 = Fogli di lavoro ("PIVOTS SM_SKU"). Tabelle pivot ("Tabella pivot 4")
Imposta xPFile2 = xPTable2.PivotFields ("Geografia")
xStr2 = Destinazione.Testo
xPFile2.ClearAllFilters
xPFile2.PaginaCorrente = xStr2
Application.ScreenUpdating = True

Dim xPTable3 come tabella pivot
Dim xPFile3 come campo pivot
Dim xStr3 come stringa
On Error Resume Next
Se Intersect(Target, Range("B1")) non è nulla, allora Exit Sub
Application.ScreenUpdating = False
Imposta xPTable3 = Fogli di lavoro ("PIVOTS SM_SKU"). Tabelle pivot ("Tabella pivot 8")
Imposta xPFile3 = xPTable3.PivotFields ("Geografia")
xStr3 = Destinazione.Testo
xPFile3.ClearAllFilters
xPFile3.PaginaCorrente = xStr3
Application.ScreenUpdating = True

End Sub
Questo commento è stato fatto dal moderatore sul sito
Hi!

Sono nuovo con VBA e vorrei avere un codice per selezionare un filtro pivot basato su un intervallo di celle.
Come posso modificare "CurrentPage" in modo che sia un valore di intervallo?
Grazie!!
-------------------------------------------------- -----------------------------------------
Sub PrintTour()

ActiveSheet.PivotTables("TabellaPivot1").CampiPivot( _
"[Bereich 1].[Tour].[Tour]"). _
Cancella tutti i filtri
ActiveSheet.PivotTables("TabellaPivot1").CampiPivot( _
"[Bereich 1].[Tour].[Tour]"). _
CurrentPage = "[Bereich 1].[Tour tenente Anlieferungstag].&[4001-01]"
End Sub
Questo commento è stato fatto dal moderatore sul sito
Grazie mille per questo codice! L'ho fatto funzionare dopo essermi adattato ai miei campi, ma dopo aver formattato alcune modifiche sul mio foglio ora non funziona! L'ho spostato da A1 a B1, ho modificato la formattazione di alcune celle per farlo risaltare, ecc. Niente di troppo pazzo ma ora non si aggiorna quando cambio il testo in B1. Qualcuno ha qualche idea?

Private Sub Worksheet_Change (ByVal Target As Range)
'test
Dim xPTable come tabella pivot
Dim xPFile come campo pivot
Dim xStr come stringa

Dim x2PTable come tabella pivot
Dim x2PFile come campo pivot
Dim x2Str come stringa

Dim x3PTable come tabella pivot
Dim x3PFile come campo pivot
Dim x3Str come stringa

On Error Resume Next
Se Intersect(Target, Range("b1")) non è nulla, allora Exit Sub

Application.ScreenUpdating = False

'tbl-1
Imposta xPTable = Fogli di lavoro ("Report riga"). Tabelle pivot ("Tabella pivot 7")
Imposta xPFile = xPTable.PivotFields ("Sorgente utopia")
xStr = Target.Text
xPFile.ClearAllFilters
xPFile.PaginaCorrente = xStr

'tbl-2
Imposta x2PTable = Fogli di lavoro ("Report riga"). Tabelle pivot ("Tabella pivot 2")
Imposta x2PFile = x2PTable.PivotFields ("Sorgente utopia")
x2Str = Target.Text
x2PFile.ClearAllFilters
x2PFile.PaginaCorrente = x2Str

'tbl-3
Imposta x3PTable = Fogli di lavoro ("Report riga"). Tabelle pivot ("Tabella pivot 3")
Imposta x3PFile = x3PTable.PivotFields ("Sorgente utopia")
x3Str = Target.Text
x3PFile.ClearAllFilters
x3PFile.PaginaCorrente = x3Str

Application.ScreenUpdating = True

End Sub
Questo commento è stato fatto dal moderatore sul sito
Ciao Lancia,
Ho testato il tuo codice e nel mio caso funziona bene. La modifica del formato della cella non influisce sul funzionamento del codice.
Questo commento è stato fatto dal moderatore sul sito
Come funziona con Power Pivot, quando si utilizzano più tabelle? Ho registrato la macro modificando il valore nel filtro. Apportate alcune modifiche per far funzionare il codice sopra. Ma genera un errore di mancata corrispondenza del tipo. Non importa cosa faccio.
Questo commento è stato fatto dal moderatore sul sito
Ciao DK,
Il metodo non funziona per Power Pivot. Ci dispiace per l'inconvenienza.
Questo commento è stato fatto dal moderatore sul sito
Buongiorno,
Grazie mille per queste spiegazioni.

J'aimerai utiliser un filtre (1 celle) en F4 par exemple qui filtrerait deux TCD qui sont sur la même feuille.

Cela functionne très bien avec un TCD mais dès que j'essaye de combiner le second, ça ne marche pas.
Mi potresti aiutare?

grazie mille
Ambrose
Questo commento è stato fatto dal moderatore sul sito
Buongiorno,

Merci beaucoup pour cette explication qui marche parfaitement.
In revanche, j'aimerais pouvoir utiliser ce code pour pouvoir filtrer deux tableaux croisés dynamiques en même temps qui sont sur la même feuille. La sola piccola differenza tra i due, c'est qu'ils n'utilisent pas les mêmes sources. En revanche, le filtre sur lequel se base ces TDC est le même.

Pourriez-vous m'aider à faire évoluer ce code afin que cela fonctionne ?

Voici le code utilisé quand il marche avec un TCD :

Private Sub Worksheet_Change (ByVal Target As Range)
'Aggiorna entro Extendoffice 20180702
Dim xPTable come tabella pivot
Dim xPFile come campo pivot
Dim xStr come stringa
On Error Resume Next
Se Intersect(Target, Range("G4")) non è nulla, allora Exit Sub
Application.ScreenUpdating = False
Imposta xPTable = Fogli di lavoro("Cadrage").PivotTables("Tableau croisé dynamique7")
Set xPFile = xPTable.PivotFields("N°PROGETTO")
xStr = Target.Text
xPFile.ClearAllFilters
xPFile.PaginaCorrente = xStr
Application.ScreenUpdating = True
End Sub

grazie mille
Questo commento è stato fatto dal moderatore sul sito
Ciao Ambrogio,

Spiacenti, è difficile modificare questo codice per soddisfare le tue esigenze. Se desideri filtrare più tabelle pivot con un singolo filtro, i metodi in questo articolo di seguito potrebbero farti un favore:
Come collegare una singola affettatrice a più tabelle pivot in Excel?
Non ci sono ancora commenti pubblicati qui
Lasciate i vostri commenti
Pubblicazione come ospite
×
Valuta questo post:
0   Personaggi
Posizioni suggerite

Seguici

Copyright © 2009 - www.extendoffice.com. | Tutti i diritti riservati. Offerto da ExtendOffice, | Mappa del sito
Microsoft e il logo Office sono marchi o marchi registrati di Microsoft Corporation negli Stati Uniti e / o in altri paesi.
Protetto da Sectigo SSL