Criteri multipli di Vlookup con VBA UDF - Esempi di codice VBA

Vlookup Condizioni multiple utilizzando VBA

Considera la seguente tabella di dati:

La funzione Vlookup standard all'interno di Excel ha il seguente formato:

CERCA.VERT(“”Segna”, B6:G12”,2,FALSO)

Che restituirà "Marrone".

Tuttavia, che dire se volessimo cercare 2 o più condizioni, ad esempio il nome, il cognome e l'età nella tabella sopra? La seguente UDF ci consente di farlo:

123456789101112131415161718192021222324252627282930313233343536373839 Funzione ThreeParameterVlookup(Data_Range As Range, Col As Integer, Parameter1 As Variant, Parameter2 As Variant, Parameter3 As Variant) As Variant"Dichiara variabili"Dim CellDim Current_Row As IntegerDim No_Of_Rows_in_Range As IntegerDim No_of_Cols_in_Range As IntegerDim Matching_Row As Integer'imposta la risposta su N/A per impostazione predefinitaThreeParameterVlookup = CVErr(xlErrNA)Matching_Row = 0Current_Row = 1No_Of_Rows_in_Range = Data_Range.Rows.CountNo_of_Cols_in_Range = Data_Range.Columns.Count'Controlla se Col è maggiore del numero di colonne nell'intervalloIf (Col > No_of_Cols_in_Range) ThenThreeParameterVlookup = CVErr(xlErrRef)Finisci seIf (Col <= No_of_Cols_in_Range) ThenFareIf ((Data_Range.Cells(Current_Row, 1).Value = Parameter1) And _(Data_Range.Cells(Current_Row, 2).Value = Parameter2) E _(Data_Range.Cells(Current_Row, 3).Value = Parameter3)) AlloraMatching_Row = Current_RowFinisci seRiga_corrente = Riga_corrente + 1Ciclo fino a ((Current_Row = No_Of_Rows_in_Range) Or (match_Row 0))Se Matching_Row 0 AlloraThreeParameterVlookup = Data_Range.Cells(Matching_Row, Col)Finisci seFinisci seFine funzione

Ha la seguente sintassi:

ThreeParameterVlookup(Data_Range, Col , Parameter1, Parameter2 , Parameter3 )

In cui si:
• Data_Range è l'intervallo dei dati
• Col è un numero intero per la colonna richiesta
• Parametro1, Parametro2 e Parametro3 sono rispettivamente i valori delle prime tre colonne

Affinché:

=ThreeParameterVlookup(B6:G12,6”,Mark”,”Brown”,7) restituirà ”Tolworth” poiché si tratta di una corrispondenza su “Mark”, “Brown” e 7 e un riferimento alla sesta colonna

Nota che questa funzione funzionerà anche con intervalli denominati (dinamici):

=ThreeParameterVlookup(named_range,6”,Adrian”,”White”,7) restituirà “Chessington” dove abbiamo impostato l'intervallo denominato “Named_Range”.

Se Excel non riesce a individuare una corrispondenza, per impostazione predefinita viene restituito "N/A". In effetti, la funzione assume un valore N/A all'inizio e poi cambia solo quando trova una corrispondenza esatta.

Inoltre, se il valore di Col supera il numero di colonne, si verifica un errore di riferimento.

Per scaricare il file .XLSM per questo tutorial, clicca qui

wave wave wave wave wave