' Il nome del corrente modulo VBA (Visual Basic for Application) ' deve iniziare con i caratteri "Modulo" ed avere estensione ".bas". ' Per importarlo dentro un Excel 2007 ".xlsm" (con macro attivate), esegui ' Sviluppo, Visual Basic, File, Importa file... ' e, infine, scegli il file corrente dalla finestra di importazione. ' Attribute VB_Name = "Modulo_VLOOKUP2" Option Compare Text Function VLOOKUP2(Valore As Variant, Matrice As Range, Indice As Long) As Variant ' Trovato su www.terzaghi.it e modificato con scorrimento all'indietro. ' Ricerca nella prima colonna della matrice Matrice l'elemento Valore; ' se lo trova, restituisce l'elemento Indice-esimo della riga ' corrispondente. ' La prima colonna di Matrice deve essere ordinata in senso crescente. ' Se non trova una corrispondenza esatta, o se l'indice Indice non è valido, ' restituisce #N/D. ' Simile alla funzione Excel CERCA.VERT, ma piu' efficiente. ' GENTILE CONCESSIONE DI Giampiero Bianucci ' ' Scorrimento all'indietro ' Claudio Neroni 09-09-2010 ' Nel caso di matrice non univoca, trovato il primo risultato, ' scorre all'indietro cercando il primo degli omonimi. Dim Low, Mid, High As Long Dim Found As Boolean Low = 1 High = Matrice.Rows.Count Found = False Do While Low <= High Mid = (Low + High) \ 2 Select Case Matrice(Mid, 1) Case Is > Valore High = Mid - 1 Case Is < Valore Low = Mid + 1 Case Else Found = True Exit Do End Select Loop If Found And (Indice >= 1) And (Indice <= Matrice.Columns.Count) Then ' Scorrimento all'indietro BEG If Mid > 1 Then Do While Matrice(Mid - 1, 1) = Matrice(Mid, 1) Mid = Mid - 1 Loop End If ' Scorrimento all'indietro END VLOOKUP2 = Matrice(Mid, Indice) Else VLOOKUP2 = CVErr(xlErrNA) End If End Function