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 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.
|