faretesto > microsoft.* > microsoft.office.excel

Pico1965 (06.12.2017, 22:14)
Buonasera amici

Data una tabella in foglio1
A B
Mela --> Rosso
Pera --> verde
Banana --> giallo
Ciliegia --> rosso
ecc ecc
E' possibile in foglio 2 estrarre solamente i frutti rossi
A
Mela
Ciliegia
ecc ecc
senza usare il codice VBA?

Grazie dell'attenzione
casanmaner (07.12.2017, 10:21)
Il giorno mercoledì 6 dicembre 2017 21:14:03 UTC+1, Pico1965 ha scritto:
[..]
> ecc ecc
> senza usare il codice VBA?
> Grazie dell'attenzione


Potresti impostare una tabella pivot in foglio due dove come filtro utilizzare la colonna del colore.
Vedi questo esempio:
xxpard (07.12.2017, 10:23)
Il giorno mercoledì 6 dicembre 2017 21:14:03 UTC+1, Pico1965 ha scritto:
[..]
> ecc ecc
> senza usare il codice VBA?
> Grazie dell'attenzione


Nel Foglio2

in A1: immetti il colore
in B1: =SE.ERRORE(INDICE(Foglio1!$A$1:$A$100;PICCOLO(SE($ A$1=Foglio1!$B$1:$B$100;RIF.RIGA($A$1:$A$100));RIF .RIGA(A1)));"")

la formula è matriciale, una volta copiata nella barra delle formule va confermata con Ctrl+Maiusc+Invio e trascinata in basso a volontà.
Modifica il limite dell'intervallo(100) in base alle tue esigenze, anche oltre il numero di dati.

ciao
paoloard
Pico1965 (07.12.2017, 14:27)
Il giorno giovedì 7 dicembre 2017 09:23:41 UTC+1, xxp...@gmail.com ha scritto:
> Il giorno mercoledì 6 dicembre 2017 21:14:03 UTC+1, Pico1965 ha scritto:
> Nel Foglio2
> in A1: immetti il colore
> in B1: =SE.ERRORE(INDICE(Foglio1!$A:$A0;PICCOLO(SE($A=Fog lio1!$B:$B0;RIF.RIGA($A:$A0));RIF.RIGA(A1)));"")
> la formula è matriciale, una volta copiata nella barra delle formuleva confermata con Ctrl+Maiusc+Invio e trascinata in basso a volontà.
> Modifica il limite dell'intervallo(100) in base alle tue esigenze, anche oltre il numero di dati.
> ciao
> paoloard


Grazie a tutti per l'attenzione al mio problema.

La risposta che soddisfa le mie esigenze (nessun intervento dell'operatore)è quella di paoloard che, naturalmente, funziona perfettamente.

Certo che avete dei cervelli....
xxpard (07.12.2017, 22:39)
....> La risposta che soddisfa le mie esigenze (nessun intervento dell'operatore) è quella di paoloard che, naturalmente, funziona perfettamente.
> Certo che avete dei cervelli....


Grazie per il "naturalmente" ;-)
paoloard
Pico1965 (08.12.2017, 10:46)
Il giorno giovedì 7 dicembre 2017 09:23:41 UTC+1, xxp...@gmail.com ha scritto:
> Il giorno mercoledì 6 dicembre 2017 21:14:03 UTC+1, Pico1965 ha scritto:
> Nel Foglio2
> in A1: immetti il colore
> in B1: =SE.ERRORE(INDICE(Foglio1!$A:$A0;PICCOLO(SE($A=Fog lio1!$B:$B0;RIF.RIGA($A:$A0));RIF.RIGA(A1)));"")
> la formula è matriciale, una volta copiata nella barra delle formuleva confermata con Ctrl+Maiusc+Invio e trascinata in basso a volontà.
> Modifica il limite dell'intervallo(100) in base alle tue esigenze, anche oltre il numero di dati.
> ciao
> paoloard


Buona festività a tutti!!

Approfittando di un attimo di pausa ho testato sul campo la tua formula.



Per semplicità (mia!) ho fatto tutto in un foglio.
La tabella in alto a sx è quella da cui è nata la tua risposta.
Base dati con origine A1 e funziona tranquillamente.

La tabella in alto a dx non ha come origine A1 ma funziona ugualmente.
La tabella al centro non ha come origine A1 ma non funziona.

Mi pare di avere capito che la tua formula funziona solamente se il range di ricerca parte dalla prima riga. E' evitabile?

Quando hai un attimo di tempo sarebbe possibile aggiungere un'altra condizione di filtro tipo tutti i frutti rossi e di provenienza ITALIA.

Grazie sempre dell'attenzione e buona Madonna a tutti!
buonocoreelio (11.12.2017, 13:58)
Il giorno mercoledì 6 dicembre 2017 21:14:03 UTC+1, Pico1965 ha scritto:
[..]
> ecc ecc
> senza usare il codice VBA?
> Grazie dell'attenzione


Un' alternativa alle formule matriciali (tutto su un foglio per semplicità):
Colonna di appoggio in C; In C2 la formula =B2 & "_" & CONTA.SE($B$2:B2;B2)
da trascinare fino all'ultimo valore di colonna A
In G1 il colore
In G2 la formula = SE.ERRORE(INDICE($A$2:$A$100;CONFRONTA($G$1& "_" & RIF..RIGA(A1);$C$2:$C$100;0));"")
da trascinare al numero massimo di valori restituibili ( cioè ai valori in colonna A)
oppure in G2 la formula =SE.ERRORE(INDICE($A$2:$A$100;CONFRONTA($G$1& "_"& RIF.RIGA(A2)-RIF.RIGA($G$1);$C$2:$C$100;0));"")
che permette aggiunta di righe sopra la prima senza alterare il risultato

Ciao Elio
Pico1965 (ieri, 12:11)
Il giorno lunedì 11 dicembre 2017 12:58:18 UTC+1, buonoc...@gmail.com ha scritto:
> Il giorno mercoledì 6 dicembre 2017 21:14:03 UTC+1, Pico1965 ha scritto:
> Un' alternativa alle formule matriciali (tutto su un foglio per semplicità):
> Colonna di appoggio in C; In C2 la formula =B2 & "_" & CONTA.SE($B:B2;B2)
> da trascinare fino all'ultimo valore di colonna A
> In G1 il colore
> In G2 la formula = SE.ERRORE(INDICE($A:$A0;CONFRONTA($G& "_" & RIF.RIGA(A1);$C:$C0;0));"")
> da trascinare al numero massimo di valori restituibili ( cioè ai valori in colonna A)
> oppure in G2 la formula =SE.ERRORE(INDICE($A:$A0;CONFRONTA($G& "_" & RIF.RIGA(A2)-RIF.RIGA($G);$C:$C0;0));"")
> che permette aggiunta di righe sopra la prima senza alterare il risultato
> Ciao Elio


Grazie per il tuo suggerimento...
Ho aggiornato il mio foglio


Come potete constatare entrambe le soluzioni proposte sono sensibili alla posizione relativa tra il valore da ricercare e la prima riga del database.

Sarà necessario tenerne conto in sede di sviluppo nel foglio.

In calce al foglio di Elio ho provato a risolvere il filtro a due valori.
Sembra funzionare... ci date un'occhiata?

Grazie dell'aiuto
buonocoreelio (ieri, 17:29)
Il giorno martedì 12 dicembre 2017 11:11:58 UTC+1, Pico1965 ha scritto:
> Il giorno lunedì 11 dicembre 2017 12:58:18 UTC+1, buonoc...@gmail.com ha scritto:
> Grazie per il tuo suggerimento...
> Ho aggiornato il mio foglio
>
> Come potete constatare entrambe le soluzioni proposte sono sensibili allaposizione relativa tra il valore da ricercare e la prima riga del database..
> Sarà necessario tenerne conto in sede di sviluppo nel foglio.
> In calce al foglio di Elio ho provato a risolvere il filtro a due valori.
> Sembra funzionare... ci date un'occhiata?
> Grazie dell'aiuto


LA tua soluzione non risolve la corretta attribuzione del suffisso finale quando la ricerca è a 2 variabili. Per questo dovresti avere 2 colonme di appoggio. Nel foglio postato da R22 (trascinata fino a R25) la formula:
B22 & "_" & C22 e da S22 (trascinato fino a S25) la formula: R22 & "_" & CONTA.SE($R$22:R22;R22).
In J26 (trascinata fino a J29) la formula: =SE.ERRORE(INDICE($A$22:$A$25;CONFRONTA($L$22 & "_" & $O$22 & "_" & RIF.RIGA(A22)-RIF.RIGA($L$22)+1;$S$22:$S$25;0));"")
Per ottenere l'elenco con la prima voce filtrata correttamente sulla prima riga dell'elenco il suffisso deve essere 1 per tale voce. pertanto se la struttura /grafica del foglio comporta che le voci dell'impostazione del filtro si trovano sulla stessa ruga del primo record del database, essendo la differenza RIF.RIGA(A22)-RIF.RIGA($L$22) = 0 andrà aggiunto 1 che diventerà 2 ,3 ... nelle righe successive.
Trovo comunque che quando si vuole operare un'estrazione a più variabili la soluzione più adeguata sia lo strumento predefinito di Excel delfiltro avanzato meglio se automatizzato con il VBA per non dover ogni volta rifare i passaggi dell'interfaccia utente.
Ciao
Elio
Discussioni simili