Estensione di CERCA.VERT: cerca l'N-esimo valore della lista e restituisce un valore a sinistra della colonna di ricerca


Può capitare che, all'interno di una lista di valori sia necessario trovare l'N-esimo valore associato a un certo campo.

Ho sviluppato questa semplice funzione che sostituisce la funzione CERCA.VERT con due estensioni importanti:

  • la possibilità di cercare l'N-esimo valore associato a un certo campo

  • la possibilità di recuperare un valore anche sulla sinistra della colonna di ricerca.

La funzione è la seguente:

 

____________________________________________

 

Function NLookup(Dove As Range, Valore As Variant, Occorrenza As Long, riga As Long, colonna As Long) As Variant
Dim Contatore As Integer
Dim CellaRicerca As Range
Dim First As Range
Dim CCorrente As Range
Dim Trovato As Boolean

Contatore = 0
Trovato = False
For Each CCorrente In Dove
    If CCorrente.Value = Valore Then
         Contatore = Contatore + 1
    End If
    If Contatore = Occorrenza Then
         Trovato = True
         Exit For
    End If
Next
If
Trovato Then
      NLookup = CCorrente.Offset(riga, colonna).Value
Else
      NLookup = CVErr(xlErrNA)
End If
End Function

____________________________________________

 

Per poter utilizzare la funzione é necessario inserire nel foglio Excel:

 

=Nlookup($B$11:$B$16;F11;G11;0;1)

 

dove:

  • $B$11:$B$16 indica il range entro cui cercare

  • F11 indica cosa cercare

  • G11 indica il numero di occorrenza da cercare (1 esegue la stessa cosa di CERCA.VERT)

  • 0 indica di quante righe verso il basso, una volta trovata l'occorrenza desiderata, è necessario spostarsi per restituire il valore richiesto (se si inserisce un valore negativo significa spostarsi verso l'alto)

  • 1 indica di quante righe verso destra, una volta trovata l'occorrenza desiderata, è necessario spostarsi per restituire il valore richiesto (se si inserisce un valore negativo significa spostarsi a sinistra)

In sostanza la formula precedente (con G11=1) corrisponde a scrivere:

 

=Cerca.vert ($B$11:$B$16;F11;2,0)

 

Utilizzando con intelligenza i due ultimi campi è possibile utilizzare la funzione sia per simulare il CERCA.VERT, sia per simulare il CERCA.ORIZZ. Per il CERCA.VERT è infatti sufficiente dire che bisogna spostarsi per 0 righe verso l'alto o verso il basso, dualmente, per il CERCA.ORIZZ bisogna specificare di spostarsi di 0 colonne a destra o a sinistra.

 

Compattazione di Database:

 

Una leggera modifica della funzione precedente permette pure di "compattare" i database che contengono degli spazi come il seguente:

per trasformarlo nel seguente database:

 

 

Il vantaggio importante della funzione è che è "dinamica" nel senso che se dovessero cambiare le posizioni o il numero degli spazi inseriti nel database, essa si adatta automaticamente alla nuova struttura compattando il database adeguandosi ai nuovi spazi.

La funzione è la seguente:

 

=DatoBuono($B$11:$B$16;F23;0;0)

 

dove:

  • $B$11:$B$16 indica il range entro cui cercare

  • F23 indica il numero progressivo del dato da restituire (1,2,3 etc)

  • 0 indica di quante righe verso il basso, una volta trovata l'occorrenza desiderata, è necessario spostarsi per restituire il valore richiesto (se si inserisce un valore negativo significa spostarsi verso l'alto)

  • 0 indica di quante righe verso destra, una volta trovata l'occorrenza desiderata, è necessario spostarsi per restituire il valore richiesto (se si inserisce un valore negativo significa spostarsi a sinistra)

Per avere il codice di questa seconda funzione dovete scaricare il file allegato.


Licenza Creative Commons

Questa opera è pubblicata sotto una Licenza Creative Commons.
Scarica il File di Esempio


iscriviti cancellati



Commenti a questa pagina:   Inviate una mail