Condividi:        

Filtrare su più colonne

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Filtrare su più colonne

Postdi wallace&gromit » 10/10/18 16:27

Qualcuno ha già risolto in maniera elegante l'esigenza di filtrare i dati in base a più colonne?
Ho una tabella con varie colonne, in cui riga per riga metto una x se la condizione per quella colonna è vailda.
Alla fine mi ritrovo con una tabella con un pattern di x, talvolta su una riga ho varie x, talvolta una sola, oppure nessuna.
Con il filtro automatico posso rendere visibili o invisibili le x su ogni specifica colonna, mentre io vorrei scegliere di vedere solo l righe che non hanno alcuna x, oppure tutte quelle che hanno almeno una x in qualsiasi colonna.

Certo, la soluzione più semplice è creare una colonna d'appoggio che mi conta il numero di x, oppure un'altra soluzione sarebbe fare il filtro in un'altro foglio, oppure ancora una macro. Ma magari c'è qualcosa di ancora più immediato e che non richiede altri mezzi?
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2180
Iscritto il: 16/01/12 14:21

Sponsor
 

Re: Filtrare su più colonne

Postdi Anthony47 » 10/10/18 19:15

Il filtro si applica alla singola colonna. Per mixare quindi il contenuto di piu' colonne in un unico filtro dovresti lavorare con una colonna di appoggio; o in alternativa usare una macro che applichi il filtro a piu' colonne.
Oppure esplori l'uso del "filtro avanzato" (vedi Filtrare utilizzando criteri avanzati nell'help online di Excel); presuppone l'uso di righe sovrastanti l'elenco da filtrare e destinate a contenere i criteri di filtro voluti.
Altre opzioni non mi vengono in mente.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Filtrare su più colonne

Postdi wallace&gromit » 11/10/18 10:54

Grazie, più o meno come pensavo, dovrò approfondire la variante filtro avanzato
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2180
Iscritto il: 16/01/12 14:21

Re: Filtrare su più colonne

Postdi Anthony47 » 11/10/18 14:06

Il filtro avanzato e' molto diverso dal filtro automatico, ti lascio qualche suggerimento per evitare di girare a vuoto:
-l'elenco da filtrare deve trovarsi non prima di riga 7 del foglio, e le righe sovrastanti vanno usate per posizionarci i filtri validi per quella colonna
-la riga 1 deve contenere le stesse intestazioni che sono in riga 7 (o dove comincia il tuo elenco)
-deve esserci almeno una riga vuota prima che cominci l'elenco da filtrare
-nel wizard del filtro avanzato, nel campo Intervallo criteri, inserire anche la riga di intestazione (es A1:G3), e non inserire righe che non contengano criteri (perche' allora visualizzerebbe tutto l'elenco)
-i criteri di una riga sono tutti in AND
-i criteri delle varie righe sono in OR
-i criteri relative a DATE devono usare il valore numero corrispondente alla data, rendendo il tutto un po' criptico.

Ad esempio:
Immagine

Queste impostazioni filtreranno l'elenco dove "sped" comincia con 006 e la cui data e' >= al 1/10/2018 (vedi Formula nella barra della formula); oppure dove ddt=5732; oppure dove sped comincia con 147; oppure sped comincia con 039 e la data e' > 2/10/2018; oppure ddt comincia con 209.

Nota che dopo aver cambiato un filtro, l'elenco filtrato non si modifica automaticamente; devi ripetere il comando di Filtro avanzato.
Se vuoi rendere automatico il filtraggio puoi usare una macro di Worksheet_Change. Ad esempio:

1) Registra una macro mentre fai un filtro avanzato usando tutta l'area dedicata ai criteri di filtro, nel caso del mio esempio A1:K7. A me e' venuto qualcosa tipo:
Codice: Seleziona tutto
Sub AdvFilt()
'
    Range("A9").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range("A9:K1344").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
        Range("A1:K7"), Unique:=False
End Sub

2) Modifichiamo il codice
Le prime tre righe si possono togliere; nella quarta imposta un'altezza dell'intervallo da filtrare che sia ampiamente sufficiente a gestire il tuo elenco di oggi e di domani.
Rendiamo la sub "parametrica" affinche' possa ricevere dal chiamante l'area effettiva di filtro.
Il nuovo codice:
Codice: Seleziona tutto
Sub AdvFilt(ByVal myRan As String)
'
''    Range("A9").Select
''    Range(Selection, Selection.End(xlDown)).Select
''    Range(Selection, Selection.End(xlToRight)).Select
    Range("A9:K10000").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
        Range(myRan), Unique:=False
End Sub
Le righe commentate possono essere eliminate

3) Ora inseriamo questa sub di Worksheet_Change sul foglio di lavoro:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Dim CritArea As String, MaxFilt As Long
'
CritArea = "A1:K7"          '<<< L'area destinata ai filtri
If Application.Intersect(Target, Range(CritArea)) Is Nothing Then Exit Sub
MaxFilt = Evaluate("max(row(1:7)*(" & CritArea & "<>""""))")   '!! Che sia Coerente con CritArea!!
Call AdvFilt(Replace(CritArea, "7", MaxFilt, , , vbTextCompare))
End Sub


In questo modo, quando si modifica una cella nell'area destinata ai filtri sara' richiamata la Sub AdvFilt passandogli l'area effettivamente usata dai filtri

Spero ti dia utili spunti...
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Filtrare su più colonne

Postdi wallace&gromit » 11/10/18 14:34

Certo che sono utili, grazie mille ancora, era il concetto di AND e OR che non mi era chiaro, ora sì.

Non so se comunque sia una soluzione che andrò ad utilizzare (per lo meno non nel mio caso, dove è molto più facile avvalersi di una colonna d'appoggio) però in futuro non si sa mai.
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2180
Iscritto il: 16/01/12 14:21


Torna a Applicazioni Office Windows


Topic correlati a "Filtrare su più colonne":


Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti