VBA UDF ile Vlookup Çoklu Kriterleri - VBA Kodu Örnekleri

VBA Kullanan Vlookup Birden Çok Koşul

Aşağıdaki veri tablosunu göz önünde bulundurun:

Excel'deki standart Vlookup işlevi aşağıdaki biçime sahiptir:

DÜŞEYARA(“”İşaret”, B6:G12”,2,YANLIŞ)

Hangi “Kahverengi” dönecek.

Ancak, yukarıdaki tabloda ad, soyad ve yaş gibi 2 veya daha fazla koşula bakmak istersek ne olur? Aşağıdaki UDF bunu yapmamızı sağlar:

123456789101112131415161718192021222324252627282930313233343536373839 İşlev ÜçParameterVlookup(Aralık Olarak Veri_Aralığı, Tamsayı Olarak Sütun, Varyant Olarak Parametre1, Varyant Olarak Parametre2, Varyant Olarak Parametre3) Varyant Olarak'Değişkenleri BildirinKarartma HücresiCurrent_Row'u Tamsayı Olarak KarartınTamsayı olarak No_Of_Rows_in_Range DimTamsayı Olarak Dim No_of_Cols_in_RangeMatching_Row'u Tamsayı Olarak Karartın'cevabı varsayılan olarak N/A olarak ayarlaThreeParameterVlookup = CVERr(xlErrNA)Matching_Row = 0Current_Row = 1No_Of_Rows_in_Range = Data_Range.Rows.CountNo_of_Cols_in_Range = Data_Range.Columns.Count'Col'ün aralıktaki sütun sayısından büyük olup olmadığını kontrol edinEğer (Sütun > No_of_Cols_in_Range) O zamanThreeParameterVlookup = CVERr(xlErrRef)BitirEğer (Col <= No_of_Cols_in_Range) O zamanYapmakIf ((Data_Range.Cells(Current_Row, 1).Value = Parameter1) Ve _(Data_Range.Cells(Current_Row, 2).Value = Parameter2) Ve _(Data_Range.Cells(Current_Row, 3).Value = Parameter3) SonraMatching_Row = Current_RowBitirCurrent_Row = Current_Row + 1Döngü ((Current_Row = No_Of_Rows_in_Range) Veya (Matching_Row 0) kadar)Matching_Row 0 iseThreeParameterVlookup = Data_Range.Cells(Matching_Row, Col)BitirBitirBitiş İşlevi

Aşağıdaki sözdizimine sahiptir:

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

Nereye:
• Data_Range, veri aralığıdır
• Sütun, gerekli sütun için bir tamsayıdır
• Parametre1, Parametre2 ve Parametre3, sırasıyla ilk üç sütundaki değerlerdir.

Böylece:

=ThreeParameterVlookup(B6:G12,6,”İşaretle”,”Kahverengi”,7) "Tolworth" değerini döndürür, çünkü bu "İşaret", "Kahverengi" ve 7'de bir eşleşme ve 6. sütuna bir referanstır

Bu işlevin (dinamik) adlandırılmış aralıklarla da çalışacağını unutmayın:

=ÜçParameterVlookup(named_range,6,”Adrian”,”White”,7) “Named_Range” adlı aralığı oluşturduğumuz “Chessington” değerini döndürür.

Excel bir eşleşme bulamazsa varsayılan olarak "Yok" döndürülür. Aslında, işlev başlangıçta N/A değerini varsayar ve daha sonra yalnızca tam bir eşleşme bulduğunda değişir.

Ayrıca Col değeri sütun sayısını aşarsa, bir Referans hatası oluşur.

Bu eğitim için .XLSM dosyasını indirmek için burayı tıklayın

wave wave wave wave wave