vlookup condizionale



  • vlookup "condizionale"
    di Tatiana (utente non iscritto) data: 13/04/2016 18:42:43

    Salve a tutti,
    sto cercando di fare una funzione che sia una sorta di vlookup, ma vorrei mettere una condizione in maniera che, trovata la prima cella che ha un dato valore nella Colonna uno, mi riporti la stessa riga della colonna due solo se il dato nella colonna due rispetta un certo parametro, altrimenti dovrebbe proseguire la ricerca.
    Esempio: nella Colonna una ci sono dei cognomi e nella Colonna 2 delle date di nascita.
    Ho diversi "ROSSI" e gli anni di nascita sono 01/01/1975, 31/12/1975, 10/01/1976, 15/04/1976, 30/12/1976, xx/xx/1977 etc.
    Se io faccio un normale vlookup con ROSSI, lui mi restituisce la data collegata al primo ROSSI che incontra (01/01/1975). Io invece vorrei che mi restituisca la data del primo che incontra che si chiama ROSSI e che e'nato nel 1976 (che in questo caso e' 10/01/1976).
    Si puo'fare? Io mi sono persa in un intreccio di match, index e vlookup ma fin'ora con scarsissimi risultati....

    GRAZIE!



  • di alfrimpa data: 13/04/2016 18:48:36

    Ciao Tatiana.

    Domanda: e se ci sono più Rossi nati nel 1976 come si fa?

    Allega un file di esempio rappresentativo della situazione corredato dal risultato desiderato.

    Alfredo





  • di alfrimpa data: 13/04/2016 18:58:29

    Ciao Tatiana

    Ti allego file (Tatiana.xlsm) dove ho scritto un UDF in Visual Basic che fa quello che chiedi.

    Guardalo un po' e dimmi cosa ne pensi.

    Alfredo

     
    Function DataNascita(a As Range, b As Range)
    Dim rng As Range
    Dim cel As Range
    Set rng = Range("a1:a7")
    For Each cel In rng
    If cel.Value = a And cel.Offset(0, 1).Value = b Then
        DataNascita = cel.Offset(0, 2).Value
    End If
    Next cel
    End Function
    






  • di tatiana (utente non iscritto) data: 13/04/2016 19:07:59

    grazie Alfredo per la risposta.
    ti ho allegato un file per risponderti, quello che mi serve e'che mi dia la data del primo Rossi che incontra nato nel 2016, se poi ce ne sono altri non mi interessa.
    Per quanto riguarda il UDF, devo dire la veritá, non sono a questi livelli...
    Non sarebbe possibile farlo con delle formule invece che con il Visual Basic?



  • di Tatiana (utente non iscritto) data: 13/04/2016 19:13:07

    EHM.... credo sia evidente l'errore del precedente messaggio, ma giusto per correttezza, NO nato nel 2016, ma nel 1976!
    GRAZIE!



  • di alfrimpa data: 13/04/2016 19:33:12

    Nel tuo esempio ci sono due ROSSI entrambi nati nel 1976.

    Come va trattato questo caso?

    Io con le formule non sono bravo ma una volta inserita la mia function nel file questa si usa come una qualsiasi funzione di Excel.

    Alfredo





  • di alfrimpa data: 13/04/2016 20:26:51

    Ciao Tatiana

    Nel nuovo file allegato ho usato la formula che vedi sotto ma è necessario che ci sia una colonna di appoggio che estrapoli l'anno dalla data di nascita e poi non vi devono essere nominativi nati nello stesso anno altrimenti come fai a discriminarli?

    Alfredo
     
    =SCARTO(INDIRETTO("A"&CONFRONTA(H1;B1:B11;0));0;2)






  • di tatiana (utente non iscritto) data: 14/04/2016 09:49:44

    Ciao, non mi serve discriminarne se ho piu'di un ROSSI perche'i dati sono in ordine e a me serve il primo nato nel 1976, che quindi e'il primo Rossi che incontra nella lista. Per questo avevo messo piu' ROSSI nati nel 1976 ell'esempio. Ci possono essere ma a me non interessano.
    In piu' vorrei avere una formula che prescinda dalla dimensione della tabella perche'la lunghezza della tabella puo'cambiare e non vorrei dover aggiornare ogni volta la formula.



  • di alfrimpa data: 14/04/2016 10:26:33

    Ciao Tatiana

    Ti allego nuovo file (Tatiana3) dove in colonna B ho inserito la formula

    =SE.(C1="";"";ANNO(C1))

    che estrapola l'anno dalla data i C1; ho poi copiato tale formula sino a B1000 (penso sia sufficiente) ed ho nascosto la colonna B.

    Ho poi adattato la formula in G3 così

    =SCARTO(INDIRETTO("A"&CONFRONTA(H1;B1:B1000;0));0;2)

    Prova e fai sapere.

    Alfredo





  • di Tatiana (utente non iscritto) data: 14/04/2016 15:38:37

    Grazie!