Formula ricerca confronta



  • Formula ricerca confronta
    di visma (utente non iscritto) data: 14/12/2012 21:20:34

    Approfitto della competenza dei partecipanti al forum
    allego file esempio
    foglio dati
    nella colonna I ho dei codici univoci senza duplicati circa 300
    nella colonna L ho dei nomi univoci senza duplicati circa 300
    vorrei ottenere nel foglio distinta scrivendo uno dei nomi esempio pippo in A9 il codice assegnatogli h00012 in C9
    e così via se si scrive un nome
    Grazie visma



  • di Vecchio Frac data: 14/12/2012 21:38:05

    In C9 del foglio Distinta scrivi la formula:
    =INDICE(dati!I:I;CONFRONTA(A9;dati!L:L;0))
    e otterrai il risultato voluto (sempre se in foglio Dati la colonna codici si trova in colonna I e la colonna dei nomi in colonna L: ma se ti applichi un po' potrai capire come funziona la formuletta e adattarla ^_^ )





  • di visma (utente non iscritto) data: 14/12/2012 21:45:10

    Grazie vecchio frac una velocità supersonica
    mi impegno a capirla certamente è l'unico modo di imparare da chi è più esperto
    Grazie visma



  • di Vecchio Frac data: 14/12/2012 21:52:56

    Bravo. Molto bene. Ma comunque non è difficilissima:
    - CONFRONTA cerca un valore in una matrice (un range) e ne restituisce la posizione
    - INDICE prende una matrice (range) e restituisce il valore che si trova nella posizione specificata dal secondo parametro.

    Poichè hai legato il codice al nome, se trovo la posizione del nome (L:L) trovo anche la posizione del suo codice, che è in una colonna diversa, basta specificare quale è questa colonna (I:I).





  • di visma (utente non iscritto) data: 15/12/2012 17:02:31

    Grazie
    visma
    Approfitto
    =SE(INT(RIF.COLONNA()/26,09)=0;CODICE.CARATT(RIF.COLONNA()+64);CODICE.CARATT(INT(RIF.COLONNA()/26,09)+64)&CODICE.CARATT(RIF.COLONNA()-(INT(RIF.COLONNA()/26,09)*26)+64))

    Cosa significa e a cosa serve
    Grazie visma



  • di Vecchio Frac data: 15/12/2012 18:23:44

    In soldoni quella formula ti dà la traduzione letterale della colonna dove cella in cui immetti la formula stessa; se sei in BR187, restituisce "BR"; se sei in D1 restituisce "D".
    Sfrutta il fatto che il RIF.COLONNA restituisce il numero della colonna in cui ti trovi e traduce questo numero nel carattere ASCII corrispondente, aggiunge 64 perchè mentre la prima colonna ha numero 1, il codice della A è 65, quindi se sei in colonna 1 per ottenere 65 (che corrisponde a "A") devi aggiungere 64. Il 26,09 è un espediente per arrotondare gli scarti dovuti all'accumulo delle 26 lettere ogni nove su cento colonne.





  • di Vecchio Frac data: 15/12/2012 18:32:08

    Naturalmente fallisce per versioni superiori a Excel 2003, dove le lettere sono tre (Excel 2007 e Excel 2010, fino a XFD) o più, almeno cinque (il nuovissimo Excel 2013 supporta 2.147.483.647 colonne).





  • di visma (utente non iscritto) data: 15/12/2012 20:00:50

    Be intanto grazie 1000 naturalmente è una risposta non facile per me neofita la devo leggere e rileggere per capirne la logica ma trovo excel molto eccitante ogni passo avanti è un divertimento
    Grazie visma



  • di visma (utente non iscritto) data: 16/12/2012 13:15:28

    Ciao sono ancora qua
    ho usato la formula di vecchio frac =INDICE(dati!I:I;CONFRONTA(A9;dati!L:L;0))
    ed è perfetta ma ho un piccolo problema (allego file) se A11 manca un nome non vorrei N/D ma niente
    ci ho provato con SE.ERRORE ma non ci sono riuscito quale è la sintassi corretta se un dato nella ricerca manca
    Grazie visma



  • di Vecchio Frac data: 16/12/2012 13:57:52

    La cosa più veloce che mi viene in mente è un SE in combinazione con VAL.ERRORE:
    =SE(VAL.ERRORE(INDICE(dati!I:I;CONFRONTA(A11;dati!L:L;0)));"not found";INDICE(dati!I:I;CONFRONTA(A11;dati!L:L;0)))

    Io ho Excel 2003 e devo usare VAL.ERRORE.

    Sicuramente SE.ERRORE funziona in modo più ottimizzato ma non lo posso provare, però dovrebbe potersi utilizzare così:
    =SE.ERRORE(INDICE(dati!I:I;CONFRONTA(A11;dati!L:L;0));"not found")





  • di visma (utente non iscritto) data: 16/12/2012 15:01:46

    Ciao ho provato la formula mi dice vero o falso mentre vorrei che al posto di N/D vorrei niente o zero o trattino
    me lo mette anche con un nome giusto
    allego nuovo file excel 2003
    Grazie visma



  • di Vecchio Frac data: 16/12/2012 18:25:53

    La funzione accoppiata SE e VAL.ERRORE funziona perfettamente... certo che la devi inserire proprio così com'è, non nel modo strano in cui l'hai inserita tu :)
    Nella cella gialla del foglio Distinta, a fianco dei nomi da ricercare, inserisci quella formula e tutto funzionerà.
    Certo, se hai la versione inglese di Excel la dovrai modificare:
    =IF(ISERROR(INDEX(dati!I:I,MATCH(A11,dati!L:L,0))),"not found",INDEX(dati!I:I,MATCH(A11,dati!L:L,0)))

    e naturalmente al posto di "not found!" ci devi mettere tu quello che vuoi che compaia se il nome non viene trovato.






  • di visma (utente non iscritto) data: 16/12/2012 20:18:29

    Grazie vecchio frac funziona sbagliavo il riferimento alla cella
    penso di aver capito grazie ancora del tuo tempo
    visma