Excel'de Birden Çok Kritere Dayalı VBA INDEX MATCH (3 Yöntem)

  • Bunu Paylaş
Hugh West

Büyük miktarda veriye sahip olduğumuzda, bazen veri kümesinden belirli bir veriyi çıkarmak zordur. Excel'in İNDEKS ve MAÇ fonksiyonları büyük bir veri kümesinde bile her türlü veriyi alabilir. VBA Excel'de herhangi bir işlemi çalıştırmak için en etkili, en hızlı ve en güvenli yöntemdir. Bu makalede, size nasıl gerçekleştirileceğine dair 3 farklı yöntem göstereceğiz Çoklu kriterlere dayalı INDEX MATCH ile Excel'de VBA makrosu .

Çalışma Kitabını İndirin

Ücretsiz alıştırma Excel çalışma kitabını buradan indirebilirsiniz.

Birden Çok Kritere Dayalı VBA INDEX MATCH.xlsm

Excel'de Birden Çok Kritere Dayalı VBA INDEX MATCH ile 3 Yöntem

Aşağıdaki bölümlerde, size aşağıdakileri nasıl gerçekleştireceğinizi göstereceğiz Bir aralık için birden çok ölçüte dayalı INDEX MATCH , belirli bir seçim için ve bir tablo için ile Excel'de VBA .

Yukarıda bu makalenin takip edeceği veri setine sahibiz. Öğrenci Adı , Öğrenci Kimliği, ve Sınav Notları Bir sütunda bulunan belirli bir sonucu diğer iki sütundaki koşullara göre çıkaracağız.

Kriterler - 1: Excel'de Çoklu (İki) Boyutlu Arama için INDEX MATCH ile VBA Gömme

Aşağıdaki görüntüyü düşünün. Belirli bir öğrencinin adını " Edge" içinde Hücre G4 ; ve arayacağımız sütun Sonuç içinde, Sınav Notları 'de saklanır. Hücre G5 . Arayacağız Sınav Notları sütununu ve Marks " Edge" içeri girdim Hücre G6 .

Arama adımları bir iki boyutlu dizi ile İNDEKS ve MAÇ ile Excel'de VBA aşağıda verilmiştir.

Adımlar:

  • Başlangıçta, tuşuna basın Alt + F11 sekmesine gidin veya klavyenizde Geliştirici -> Visual Basic açmak için Visual Basic Düzenleyicisi .

  • Ardından, açılır kod penceresinde, menü çubuğundan Insert -> Modül .

  • O halde, kopya aşağıdaki kodu ve macun kod penceresine yerleştirin.
 Sub IndexMatchStudent() Dim iSheet As Worksheet Set iSheet = Worksheets("Two Dimension") iSheet.Range("G6").Value = Application.WorksheetFunction.Index(iSheet.Range("C5:D14"), Application.WorksheetFunction.Match(iSheet.Range("G4"), iSheet.Range("B5:B14"), 0), Application.WorksheetFunction.Match(iSheet.Range("G5"), iSheet.Range("C4:D4"), 0)) End Sub 

Kodunuz artık çalışmaya hazır.

  • Şimdi, basın F5 klavyenizde veya menü çubuğundan Run -> Run Sub/UserForm üzerine de tıklayabilirsiniz. küçük Çalıştır simgesi makroyu çalıştırmak için alt menü çubuğunda.

Kod yürütüldükten sonra, sonucu görmek için aşağıdaki gif'e bakın.

Sonuç olarak Marks " Edge" sınavda var, 67 , içinde alınır Hücre G7 .

VBA Kod Açıklaması

 Dim iSheet As Çalışma Sayfası 

Çalışma Sayfası değişkeninin tanımlanması.

 Set iSheet = Çalışma Sayfaları("İki Boyut") 

Çalışma sayfası adını kaydedin. Sayfamızın adı "Two Dimension", siz kendi elektronik tablonuza göre bir ad vermelisiniz.

 iSheet.Range("G6").Value = Application.WorksheetFunction.Index(iSheet.Range("C5:D14"), Application.WorksheetFunction.Match(iSheet.Range("G4"), iSheet.Range("B5:B14"), 0), Application.WorksheetFunction.Match(iSheet.Range("G5"), iSheet.Range("C4:D4"), 0)) 

Bu kod parçası aralığı seçer C5:D14 Daha sonra hücreye kaydedilen eşleşmeyi arayın G4 menzil içinde B5:B14 ve hücrede depolanan eşleşmeyi arayın G5 menzil içinde C4:D4 ve sonucu hücreye aktarın G6 .

Daha fazlasını okuyun: Tarih Aralığı için Birden Fazla Kriterle INDEX MATCH Nasıl Kullanılır

Kriter - 2: Kullanıcı Tanımlı Fonksiyon (UDF) ile INDEX'e göre MATCH Değerini Bulmak için Makro Uygulayın

ile bir veri kümesinden eşleşen değerleri ayıklayabilirsiniz. kullanıcı tanımlı işlev (UDF) Aşağıdaki görüntüden, yapacağımız şey Öğrenci Kimliği ve Sınav Notları ve fonksiyon bize belirli bir öğrencinin İsim o belirli öğrencinin.

Bunu nasıl başaracağımızı görelim Öğrenci Adı "Finn" ile VBA .

Adımlar:

  • Daha önce gösterildiği gibi, açık Visual Basic Düzenleyicisi bir şey yok. Geliştirici sekmesi ve Ekleme a Modül kod penceresinde.
  • Sonra, kod penceresinde, kopya aşağıdaki kodu ve macun o.
 Function MatchByIndex(x As Double, y As Double) Const StartRow = 4 Dim EndRow As Long Dim iRow As Long With Worksheets("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row For iRow = StartRow To EndRow If .Range("C" & iRow).Value = x And .Range("D" & iRow).Value = y ThenMatchByIndex = .Range("B" & iRow).Value Exit Function End If Next iRow End With MatchByIndex = "Veri Bulunamadı" End Function 

  • Kaçma. Bu kod, Kaydet o.
  • Şimdi, çalışma sayfasına geri dönün ilgi çekici. Herhangi bir hücre seçin sonucu saklamak istediğiniz yer. Bizim durumumuzda, bu Hücre F5 .
  • O hücrede, yaz UDF kodunda yeni oluşturduğunuz ( MatchByIndex ) ve Öğrenci Kimliğini ve Sınav Notlarını geçmek fonksiyonun parantezleri içindeki belirli bir öğrencinin.

Adını çıkarmaya çalıştığımız için " Finn" onun KIMLIK (105) ve Marks (84) Bu nedenle bizim durumumuz için formül şöyle olur,

=MatchByIndex(105,84)

  • Ardından, tuşuna basın Girin .

Aşağıdaki resme bakın.

İçinde Hücre F5 adını başarıyla aldık " Finn" sadece onun KIMLIK ve Marks 'de oluşturduğumuz fonksiyonun içinde VBA Kod.

VBA Kod Açıklaması

 Function MatchByIndex(x Double Olarak, y Double Olarak) 

Yeni bir fonksiyon oluşturmak ve değişkenleri içine aktarmak. Fonksiyona herhangi bir isim tanımlayabilirsiniz.

 Const StartRow = 4 

Satırımız 4 numaralı satırdan başlar. Veri kümenizin başladığı satır numarasını sağlamalısınız.

 Dim EndRow As Long Dim iRow As Long 

Değişkenlerin tanımlanması.

 With Worksheets("UDF") EndRow = .Range("C:D").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 

İlk olarak, çalışılacak çalışma sayfasını tanımlayın. Sayfamızın adı "UDF", elektronik tablonuza göre bir ad vermelisiniz. Ardından aralıkta aramaya başlayın C:D tanımladığımız ilk satırdan son satıra kadar.

 For iRow = StartRow To EndRow If .Range("C" & iRow).Value = x And .Range("D" & iRow).Value = y Then MatchByIndex = .Range("B" & iRow).Value Exit Function End If Next iRow End With 

İlk satırdan son satıra doğru yinelemeye başlayın. Eğer fonksiyonun içine aktaracağımız ilk değer C sütununda yer alıyorsa ve fonksiyonun içine aktaracağımız ikinci değer D sütunundaki eşleşmeyi döndürür. B Aksi takdirde, fonksiyondan çıkın, tüm deyimleri sonlandırın ve bir sonraki satıra geçin.

 MatchByIndex = "Veri Bulunamadı" End Fonksiyon 

Yürütme sırasında önceki koşul yerine getirilmezse, "Veri Bulunamadı" mesajı döndürülecek ve kod işlevden ayrılacaktır.

Daha fazlasını okuyun: Excel'de Kısmi Metin için Birden Çok Ölçütle INDEX-MATCH (2 Yol)

Kriter - 3: Excel'de Birden Fazla Veri İçeren Bir Tablodan MATCH Değeri Döndürmek için VBA Uygulayın

Bu bölümde, aşağıdakileri nasıl yapacağımızı öğreneceğiz MsgBox'ta bir tablodaki dizinlere göre eşleşen bir değer döndürür içinde VBA Excel.

Nasıl çıkarılacağını görelim Marks veri setimizde gösterilen tablodan ( T mümkün Adı: TableMatch ) sağlayarak belirli bir öğrencinin İsim ve KIMLIK kodun içinde. Bizim durumumuz için İsim ve KIMLIK olacak Finn ve 105 sırasıyla.

Adımlar:

  • İlk olarak, açık Visual Basic Düzenleyicisi bir şey yok. Geliştirici sekmesi ve Ekleme a Modül kod penceresinde.
  • Sonra, kopya aşağıdaki kodu ve macun kod penceresine yerleştirin.
 Sub ReturnMatchedResultByIndex() Dim iBook As Workbook Dim iSheet As Worksheet Dim iTable As Object Dim iValue As Variant Dim TargetName As String Dim TargetID As Long Dim IdColumn As Long Dim NameColumn As Long Dim MarksColumn As Long Dim iCount As Long Dim iResult As Boolean Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Return Result") Set iTable =iSheet.ListObjects("TableMatch") TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("Student ID").Index NameColumn = iTable.ListColumns("Student Name").Index MarksColumn = iTable.ListColumns("Exam Marks").Index iValue = iTable.DataBodyRange.Value For iCount = 1 To UBound(iValue) If iValue(iCount, IdColumn) = TargetID Then If iValue(iCount, NameColumn) =TargetName Then iResult = True End If End If If iResult Then Exit For Next iCount If iResult Then MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks: " & iValue(iCount, MarksColumn) Else MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks Not found" End If End Sub 

Kodunuz artık çalışmaya hazır.

  • Sonra görüşürüz, Koşmak bu kodu girin ve sonuç olarak ne olduğunu görmek için aşağıdaki resme bakın.

Yukarıdaki resimden de görebileceğiniz gibi, bir Microsoft Excel gösteren açılır mesaj kutusu Marks: 84 . ID: 105 ve İsim: Finn kodun içinde sağladığımız.

VBA Kod Açıklaması

 Dim iBook As Workbook Dim iSheet As Worksheet Dim iTable As Object Dim iValue As Variant Dim TargetName As String Dim TargetID As Long Dim IdColumn As Long Dim NameColumn As Long Dim MarksColumn As Long Dim iCount As Long Dim iResult As Boolean 

Değişkenlerin tanımlanması.

 Set iBook = Application.ThisWorkbook Set iSheet = iBook.Sheets("Return Result") Set iTable = iSheet.ListObjects("TableMatch") 

Sayfa adını ve tablo adını değişkenler içinde ayarlama.

 TargetID = 105 TargetName = "Finn" IdColumn = iTable.ListColumns("Öğrenci Kimliği").Index NameColumn = iTable.ListColumns("Öğrenci Adı").Index MarksColumn = iTable.ListColumns("Sınav Notları").Index 

Arama değerlerinin ve aranacak arama sütunlarının saklanması.

 iValue = iTable.DataBodyRange.Value For iCount = 1 To UBound(iValue) If iValue(iCount, IdColumn) = TargetID Then If iValue(iCount, NameColumn) = TargetName Then iResult = True End If End If iResult Then Exit For Next iCount 

Bu kod parçası, alt simgenin başından sonuna kadar tarar ve arama sütunlarında tanımlanan Kimlik ve Ad eşleşmesini bulursa, sonucu saklar ve tüm ifadeleri kapatır. Ayrıca, yinelemeden çıkın ve kodun bir sonraki bölümüne gidin.

 If iResult Then MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks: " & iValue(iCount, MarksColumn) Else MsgBox "ID: " & TargetID & vbLf & "Name: " & TargetName & vbLf & "Marks Not found" End If 

Sonucu MsgBox'a atar.

Daha fazlasını okuyun: Excel'de Bir Hücreye Birleştirilmiş Birden Çok Değeri Arama ve Döndürme

Sonuç

Sonuç olarak, bu makale size nasıl yapılacağına dair 3 farklı yöntem gösterdi Çoklu kriterlere dayalı INDEX MATCH ile Excel'de VBA makrosu Umarım bu makale sizin için çok faydalı olmuştur. Konuyla ilgili her türlü soruyu sormaktan çekinmeyin.

Hugh West, sektörde 10 yılı aşkın deneyime sahip oldukça deneyimli bir Excel eğitmeni ve analistidir. Muhasebe ve Finans alanında lisans derecesine ve İşletme alanında yüksek lisans derecesine sahiptir. Hugh öğretme tutkusuna sahiptir ve takip etmesi ve anlaması kolay benzersiz bir öğretim yaklaşımı geliştirmiştir. Excel konusundaki uzman bilgisi, dünya çapında binlerce öğrencinin ve profesyonelin becerilerini geliştirmesine ve kariyerlerinde başarılı olmasına yardımcı olmuştur. Hugh, blogu aracılığıyla bilgisini dünyayla paylaşıyor, bireylerin ve işletmelerin tam potansiyellerine ulaşmalarına yardımcı olmak için ücretsiz Excel eğitimleri ve çevrimiçi eğitimler sunuyor.