Funzione Cerca a 2 variabili

Anonimo
2010-05-04T15:08:12+00:00

Salve,

vorrei sapere se è possibile effettuare su excel una “cerca” secondo 2 variabili.

Mi spiego meglio:

supponiamo che ho 2 sole colonne “frutta” e “colore” e che ho

Mela                gialla

Banana             gialla

Mela                Verde

Banana            Verde

Mela                Rossa

Ho bisogno di sapere se nei record precedenti all’ultimo esiste un record “Mela Verde”

Grazie

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
Risposta accettata dall'autore della domanda
Anonimo
2010-05-10T07:39:08+00:00

ciao Marvelito, volendo ormai mantenere l'orribile formula di partenza direi di ricomprendere il tutto in un'unica formula:

=SE(SINISTRA(B2;2)="PS";"la prima formula";"la seconda") eventualmente da implementare con i tuoi ulteriori controlli

dove "La prima formula" è quella già postata, però modificata con un controllo sul codice del primo foglio per indirizzare la lettura sul secondo o sul terzo, evitando così di fare tutto il ciclo di lettura anche se il codice non è quello giusto:

prima formula:

SE(SOMMA(SE(E(SINISTRA($B2;2)="PS";O(A2&Foglio2!$A$2=$A3:$A$10&$B3:$B$10;A2&Foglio2!$A$3=$A3:$A$10&$B3:$B$10;A2&Foglio2!$A$4=$A3:$A$10&$B3:$B$10;A2&Foglio2!$A$5=$A3:$A$10&$B3:$B$10));1));"OK";"NO")    matriciale, da implementare con ulteriori righe per più codici.

nota che nella prima uguaglianza $A$2=$A3: ho tolto il $ davanti al numero di riga per costringere il controllo nell'intervallo alla riga successiva a quella in esame.

seconda formula:

SE(SOMMA(SE(E(SINISTRA($B2;2)="AN";O(A2&Foglio3!$A$2=$A3:$A$10&$B3:$B$10;A2&Foglio3!$A$3=$A3:$A$10&$B3:$B$10));1));"OK";"NO") matriciale


fai sapere, grazie

ciao paoloard

http://riolab.org

***********************************************

Se la risposta ti ha aiutato clicca su "Vota come Utile".

Se ha risolto il problema clicca su "Segna come Risposta".

La risposta è stata utile?

0 commenti Nessun commento

34 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2010-05-09T08:10:20+00:00

    Ciao Eliano, ma sei lo stesso Eliano del NG! Piacere di averti ritrovato qui :-)

    Credo di avere capito ciò che Marvelito vuole ottenere, però con le formule non riesco a fare meglio.

    In pratica, lui dice: ho un db nel primo foglio comprensivo di Nome e Codice, nel secondo foglio ho l'elenco dei codici (dovrebbero essere solo 7).

    Vuole ottenere un OK se accoppiando il primo nome dell'elenco del foglio1 al primo codice del foglio2 trova un riscontro nell'elenco del foglio1 a partire dal record successivo a quello in esame.

    Poi esegue la stessa operazione accoppiando sempre il primo nome dell'elenco del foglio1 al secondo codice del foglio2, quindi al terzo e così via. Esauriti i codici del foglio2 ricomincia il ciclo col secondo nome dell'elenco. Così

    Foglio1                 Foglio2

    Mario Rossi           PS012   e fa la ricerca dal record successivo in foglio1

    Mario Rossi           PS016   idem

    Mario Rossi           PSA04   idem

    Mario Rossi           PSA06   idem

    quindi

    Giuseppe Verdi      PS012   e fa la ricerca dal record successivo in foglio1

    Giuseppe Verdi      PS016   idem

    Giuseppe Verdi      PSA04   idem

    Giuseppe Verdi      PSA06   idem

    e così per tutti i record del foglio1

    Sono anch'io convinto che, essendo tanti i record, occorra trovare una soluzione in VB, quindi ti lascio il "testimone". ;-)


    fai sapere, grazie

    ciao paoloard

    http://riolab.org

    ***********************************************

    Se la risposta ti ha aiutato clicca su "Vota come Utile".

    Se ha risolto il problema clicca su "Segna come Risposta".

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2010-05-09T01:19:55+00:00

    Ciao Paolo,

    ho provato la tua formula, sembra essere più leggera della mia, lunedì proverò a confrontare i risultati ottenuti con la tua formula con quelli della mia e poi ti saprò dire meglio, intanto ho applicato l'ho applicata a 15000 record ed il mio quad core è da un paio di minuti che sta cercando di elaborarla, credo che salverò il tutto in formato 2007 in modo da allegerire il file ancora di + e poi creerò una copia del file con i soli valori per gli utenti che lo utilizzeranno in formato 2003.

    Alla tua formula ho dovuto applicare una modifica e cioè un piccolo cerca fra i codici prima di applicare la formula

    =SE(CERCA.VERT(Q2;Codici!$A$2:$A$7;1;FALSO)>0;SE(SOMMA(SE(O(N2&Codici!$A$2=$N3:$N$14999&$Q3:$Q$14999;N2&Codici!$A$3=$N3:$N$14999&$Q3:$Q$14999;N2&Codici!$A$4=$N3:$N$14999&$Q3:$Q$14999;N2&Codici!$A$5=$N3:$N$14999&$Q3:$Q$14999;N2&Codici!$A$6=$N3:$N$14999&$Q3:$Q$14999;N2&Codici!$A$7=$N3:$N$14999&$Q3:$Q$14999);1));"OK";"NO");"no")

    vi terrò aggiornati

    Ciao

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2010-05-09T00:31:16+00:00

    Ciao Ragazzi, solo ora vedo le risposte.

    Grazie per l'aiuto che mi state offrendo. Credevo che il mio problema fosse chiaro, questa è la traccia:

    Io ho un DB di circa 10.000 record con molte colonne quello che mi interessa fare è questo sul foglio 1 ho questa situazione

    Mario Rossi           PS012

    Giuseppe Verdi      ANT04

    Mario Rossi           ANT04

    Mario Rossi           PSA04

    sul foglio 2

    Codici

    PS012

    PS016

    PSA04

    PSA06

    Ho bisogno di avere un ok sulla colonna "C" del foglio 1 se il signor Mario Rossi nei record successivi al primo ha uno dei codici presenti sul foglio 2.

    La formula si deve attivare solo se il sig Mario Rossi ha uno dei codici del foglio 2, nel caso del sig Giuseppe Verdi che ha un codice non presente sul foglio 2 non devo avere ok ma semplicemente "no".

    Per chiarezza vi dico che i codici del foglio 2  sono più di quattro e possono aumentare con il tempo (in quel caso cambierò la formula)

    Come già detto sopra, attualmente uso una formula per farlo funzionare e va tutto ok, però risulta pesante. Di seguito la riporto, magari come spunto

    =SE(Q9587=CERCA.VERT(Q9587;Codici!$A$2:$A$101;1;FALSO);O(SE(VAL.NON.DISP(CERCA.VERT(CONCATENA(N9587;Codici!$A$2);V9588:$V$15000;1;FALSO));0)>1; SE(VAL.NON.DISP(CERCA.VERT(CONCATENA(N9587;Codici!$A$3);V9588:$V$15000;1;FALSO));0)>1; SE(VAL.NON.DISP(CERCA.VERT(CONCATENA(N9587;Codici!$A$4);V9588:$V$15000;1;FALSO));0)>1;SE(VAL.NON.DISP(CERCA.VERT(CONCATENA(N9587;Codici!$A$5);V9588:$V$15000;1;FALSO));0)>1;SE(VAL.NON.DISP(CERCA.VERT(CONCATENA(N9587;Codici!$A$6);V9588:$V$15000;1;FALSO));0)>1;SE(VAL.NON.DISP(CERCA.VERT(CONCATENA(N9587;Codici!$A$7);V9588:$V$15000;1;FALSO));0)>1);"no")

    Se la traccia continua a non esservi chiara vi prego di dirmelo così  cercherò di essere più esaustivo.

    Grazie

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2010-05-08T22:17:55+00:00

    Ciao Paolo.

    Disgraziatamente Marvelito ha dichiarato di avere circa 10.000 rks.

    Personalmente non ho capito cosa vuole ottenere, quindi, almeno per me risulta impossibile tentare una risposta, magari in Vba.

    Forse sarebbe il caso se l'OP cercasse di chiarire la situazione, evitando di procedere, come sembra, per aggiustamenti successivi.

    Saluti

    Eliano

    La risposta è stata utile?

    0 commenti Nessun commento