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