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