Condividi:        

Filtro per raggruppare celle con parola in comune

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

Filtro per raggruppare celle con parola in comune

Postdi fantina » 12/02/09 17:48

Ciao.
Mi riferisco a questo codice che mi fa piacere portare un po' su, dato che a me é stato utilissimo: riguarda la visualizzazione raggruppata di celle per una chiave di ricerca che è una parola in comune:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
CChiave = "$E$1"
'<<<<<< Cella in cui digiti la chiave di filtro
Colonna = "D:D" '<<<<<< Colonna da filtrare
'
If Target.Address <> CChiave Then GoTo Esci
Chiave = "=*" & Range(CChiave).Value & "*"
Range(Colonna).AutoFilter Field:=1, Criteria1:=Chiave, Operator:=xlAnd
Esci:
Application.EnableEvents = True
End Sub

Adesso vorrei fare un'aggiunta: avendo da filtrare due colonne di dati usando una sola chiave come è meglio modificare il comando?
E ancora: posso combinare due filtri usando due celle di chiave diverse? faccio un esempio pratico:
la colonna D contiene una lista di attività economiche; la colonna C contiene una lista di prodotti: vorrei con il primo filtro sulla colonna D trovare tutte le aziende sotto la categoria dei "Produttori" e poi restringere la categoria ai soli produttori di "Materiali Chimici", elencati nella colonna C
Chiedo troppo?

Grazie mille..............
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Sponsor
 

Re: Filtro per raggruppare celle con parola in comune

Postdi Anthony47 » 12/02/09 23:14

La cosa piu' semplice e' che registri una macro mentre:
-selezioni le tue colonne
-imposti il filtro automatico
-applichi il primo filtro con un valore a piacere
-applichi il secondo filtro sempre con un valore a piacere
-fermi la registrazione

Modificherai poi la macro sostituendo i valori di filtro applicati con il valore delle due celle che dedicherai a contenere i valori di filtro.
Porterai poi il codice della macro dentro una Private Sub Worksheet_Change(ByVal Target As Range) del Foglio su cui insistono i tuoi dati in cui le prime istruzioni saranno:
Codice: Seleziona tutto
FiltroA="$C$1"   '<< Esempio
FiltroB="$D$1"   '<< Esempio
If Target.Address <>FiltroA and Target.Address <>FiltroB then Exit Sub
Application.EnableEvents = False
'il tuo codice

Ricorda Application.EnableEvents = True prima di End Sub

Se hai problemi posta il codice prodotto dalla registrazione e procederemo insieme.
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Filtro per raggruppare celle con parola in comune

Postdi fantina » 18/02/09 14:17

E lo devo aver fatto sì il pasticcio tanto che prima filtrava sbagliato, ora non filtra più nulla...
Mi aiuti?

Private Sub Worksheet_Change(ByVal Target As Range)
FiltroA = "$F$1" '<< Cella per filtrare l'attivita economica
FiltroB = "$F$2" '<< Cella per filtrare il tipo prodotto
If Target.Address <> FiltroA And Target.Address <> FiltroB Then Exit Sub
Application.EnableEvents = False
Columns("D:E").Select
Selection.AutoFilter
Range("D:D").Select
Selection.AutoFilter Field:=FiltroA, Criteria1:="F&1"
Range("E:E").Select
Selection.AutoFilter Field:=FiltroB, Criteria1:="F$2"
Application.EnableEvents = True
End Sub
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Filtro per raggruppare celle con parola in comune

Postdi fantina » 18/02/09 15:03

Rifaccio senza le mie modifiche-paciugo: la macro registrata è questa che vedi già incollata sotto al tuo codice, tale e quale come è venuta.

Private Sub Worksheet_Change(ByVal Target As Range)
FiltroA = "$F$1" '<< Cella per filtrare l'attivita economica
FiltroB = "$F$2" '<< Cella per filtrare il tipo prodotto
If Target.Address <> FiltroA And Target.Address <> FiltroB Then Exit Sub
Application.EnableEvents = False
Columns("D:E").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:= _
"11.1 Estrazione di petrolio greggio e di gas naturale "
Selection.AutoFilter Field:=2, Criteria1:="Marine fuel"
Application.EnableEvents = True
End Sub

la colonna D è l'attività economica, la colonna E è il tipo prodotto mentre F1 e F2 sono i due filtri.
Il filtro 2 ha una sintassi diversa perchè durante la registrazione la colonna del tipo prodotto è "compressa" (per colpa del primo valore di filtro registrato)?
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Filtro per raggruppare celle con parola in comune

Postdi Anthony47 » 18/02/09 23:44

Da cosi'..
Selection.AutoFilter Field:=1, Criteria1:= _
"11.1 Estrazione di petrolio greggio e di gas naturale "
Selection.AutoFilter Field:=2, Criteria1:="Marine fuel"

..a cosi':
Codice: Seleziona tutto
Selection.AutoFilter Field:=1, Criteria1:= Range(FiltroA).value
Selection.AutoFilter Field:=2, Criteria1:= Range(FiltroB).value


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

Re: Filtro per raggruppare celle con parola in comune

Postdi fantina » 23/02/09 14:36

:cry: Anthony, qualunque delle due chiavi filtro mi si "magnano" tutto il file: sia che scriva in una o nell'altra il filtro non mostra nulla se non le righe vuote alla fine dei dati, anzi per la verità sotto la fine dei dati, in quanto il file finisce a riga 227 e i filtri comprimono tutto fino a riga 261.... Ho provato anche con le celle filtro in altra posizione ma nulla.
Per comodità ti rimando la macro

Private Sub Worksheet_Change(ByVal Target As Range)
FiltroA = "$F$1" '<< Cella per filtrare l'attivita economica
FiltroB = "$F$2" '<< Cella per filtrare il tipo prodotto
If Target.Address <> FiltroA And Target.Address <> FiltroB Then Exit Sub
Application.EnableEvents = False
Columns("D:E").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:= Range(FiltroA).value
Selection.AutoFilter Field:=2, Criteria1:= Range(FiltroB).value
Application.EnableEvents = True
End Sub
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Filtro per raggruppare celle con parola in comune

Postdi Anthony47 » 23/02/09 15:37

Quello che mi viene da pensare e' che nelle celle non hai il valore che tu intendi filtrare, ma qualcosa di subdolamente differente, tipo uno spazio in piu' all' inizio o alla fine.
Prova modificando il codice in
Codice: Seleziona tutto
Selection.AutoFilter Field:=1, Criteria1:= "*" & Range(FiltroA).value & "*"
Selection.AutoFilter Field:=2, Criteria1:= "*" & Range(FiltroB).value & "*"

Queste pero' significano: mostra tutte le righe che "contengono" la tua chiave, per cui ad esempio se la chiave fosse "una" ti uscirebbero anche quelle con "nessuna"; vediamo poi in base al risultato del test che cosa fare.

Per caso prelevi le tua tabelle da una pagina web?

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

Re: Filtro per raggruppare celle con parola in comune

Postdi fantina » 23/02/09 17:08

Sì, Anthony, sto elaborando dei report che esporto in formato excel da un database aziendale che sta su web

Intanto provo con il tuo suggerimento alternativo
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Filtro per raggruppare celle con parola in comune

Postdi fantina » 23/02/09 17:46

Anthony, il nuovo codice direi che funziona benissimo, è difficile che la chiave che inserisco sia parte di un'altra parola, comunque ho visto come agisce e ci starò attenta (per non confondere un produttore di olio con uno di petrolio.... :) )
In effetti ho visto che in fondo alla descrizione c'è uno spazio.... :o addirittura basta questo per mandare in tilt il filtro?
Grazie mille Anthony del tuo immancabile supporto!
fantina
Utente Senior
 
Post: 491
Iscritto il: 05/03/07 15:24

Re: Filtro per raggruppare celle con parola in comune

Postdi Anthony47 » 23/02/09 22:32

Si, un solo carattere basta per determinare la diversita' di una stringa.
Il fatto e' che le tabelle web per essere formattate correttamente richiedono un contenuto; in genere viene messo un "&nbsp" in assenza di altro contenuto, ma i programmatori piu' pigri lasciano questo &nbsp sempre.
Per ridurre il rischio di prendere sia olio che petrolio modifica cosi':
Codice: Seleziona tutto
Selection.AutoFilter Field:=1, Criteria1:= Range(FiltroA).value & "*"
Selection.AutoFilter Field:=2, Criteria1:= Range(FiltroB).value & "*"


In questo modo selezionerai se "comincia" col tuo valore, certamente piu' restrittivo del caso precedente.

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


Torna a Applicazioni Office Windows


Topic correlati a "Filtro per raggruppare celle con parola in comune":


Chi c’è in linea

Visitano il forum: raimea e 34 ospiti