VBA Index Match'in yardımıyla, bir tabloda veya aralıkta belirli bir değeri arayabilir ve eşleşen değeri farklı bir sütundan veya aralıktan alabilirsiniz. VBA'daki Index ve Match işlevleri, aynı hedefi programatik olarak gerçekleştirmek için kullanılabilir. Görevleri otomatikleştirmek ve Excel'deki verileri işlemek için özel VBA kodu kullanmanıza olanak tanır.
Bu örnekteki VBA koduna “IndexMatchExample” adı verilir. Bu kod, VBA Index Match kullanarak Excel verilerinde Lee'nin konumunu arar ve sonucu bir ileti kutusunda gösterir. İlk adım, belirli bir aralıktaki Sütun A'da (A2:A5) “Lee” adını aramaktır. Bir eşleşme bulunursa, VBA Index işlevi Sütun B'den (B2:B5) eşleşen değeri elde etmek için kullanılır. “Sonuç” değişkeni sonucu içerir.


Hataları kontrol ettikten sonra, kod, hata yoksa, bulunan değerle birlikte bir mesaj kutusu gösterir, örneğin "Değer bulundu: [sonuç].". Ancak eşleşme yoksa, "Değer bulunamadı." mesajını görüntüler.

- VBA Index Match'i kullanarak Excel çalışma sayfalarından programlı olarak veri arayabilir ve alabilirsiniz.
- VBA Index Match ile hem temel aramalar hem de çok sayıda kriter ve harici çalışma kitaplarını içeren daha karmaşık görevler gerçekleştirilebilir.
- VBA Index Match'i kullanırken, doğru hata yönetimi ve veri doğrulaması hayati önem taşır.
- Aynı çalışma kitabındaki farklı çalışma sayfaları arasında Dizin Eşleştirmesi yapmak için Başka Bir Çalışma Sayfasından VBA Dizin Eşleştirmesi'ni kullanabiliriz.
VBA'da İndeks Eşleşmesi Nasıl Kullanılır?
- Excel'i açın ve VBA düzenleyicisini açmak için ALT + F11 tuşlarına basın.

- Menüde “Ekle”ye tıklayıp “Modül”ü seçerek yeni bir modül ekleyin.

- Öncelikle VBA Index Match işleminiz için ihtiyaç duyacağınız değişkenleri tanımlayın.
Örnek:
Dim searchValue As String ' Aradığınız değeri saklamak için değişken
Dim result As Variant ' İndeks Eşleşmesinin sonucunu saklamak için değişken - Daha sonra aramak istediğiniz değeri “searchValue” değişkenine atayın:
searchValue = “YourSearchValue”
“YourSearchValue” ifadesini Excel çalışma sayfasında bulmak istediğiniz gerçek değerle değiştirin. - Şimdi “Application.Index” ve “Application.Match” fonksiyonlarını kullanarak Index Match işlemini gerçekleştirelim.
Örneğin:
result = Application.Index(Range(“ColumnToRetrieveDataFrom”), Application.Match(searchValue, Range(“ColumnToSearchIn”), 0))
• Range(“ColumnToRetrieveDataFrom”): Eşleşmeye göre verileri almak istediğiniz aralığı belirtin.
• Range(“ColumnToSearchIn”): SearchValue'yu aramak istediğiniz aralığı belirtin.
0, son argüman tam eşleşmeyi gösterdiği için. Yaklaşık eşleşme için 1 de kullanabilirsiniz. - Eğer bir eşleşme bulunursa, alınan sonucu görüntüleyebilir veya kullanabilirsiniz.
Örnek:
MsgBox “Value: ” & result - VBA kodunuzu kaydedin ve makroyu F5 tuşuna basarak veya Excel'deki Makro iletişim kutusundan seçerek çalıştırın.
Örnekler
Örnek 1
Bu örnekte, VBA Endeks Eşleştirmesini kullanarak aynı maaş hücresinde 'John'un maaşını Excel'de bulup göstereceğiz.

- Adım 1: Yeni modülde, bir alt rutin oluşturarak başlıyoruz, ardından iki değişken tanımlıyoruz: eşleşme sonucunu tutmak için “rowIndex” ve aramak istediğimiz adı depolamak için “employeeName”.

- Adım 2: Ardından employeeName değişkenine “John” adını atarız. Bunu aramak istediğiniz adla değiştirebilirsiniz.

- Adım 3: Bu satırda, Sheets(“Example_1”).Range(“A2:A5”) aralığında “employeeName” öğesini aramak için “Application.Match” öğesini kullanıyoruz ve 0 tam eşleşmeyi gösteriyor.
Sonuç “rowIndex” değişkeninde saklanır.

Adım 4: Burada, IsError fonksiyonunu kullanarak “rowIndex”in bir hata içerip içermediğini kontrol ediyoruz .

- Adım 5: “rowIndex” bir hata içermiyorsa maaşı gösterecek bir hücrenin değerini ayarlıyoruz.
“Application.Index” fonksiyonu, eşleşmenin bulunduğu satırın B sütunundan (Range(“B2:B5”)) maaşı alır (rowIndex + 1).

- Adım 6: Eğer bir hata (çalışan bulunamadı) varsa, çalışan bulunamadığını belirten bir mesaj kutusu gösteriyoruz.

- Adım 7: VBA makrosunu kaydedin ve çalıştır'a tıklayın.
Çalışan “John” “Example_1”de bulunursa, kod onu arayacak ve Sütun B'deki bitişik hücre olan Hücre B2'de “Maaş: [John'un maaşı]” ifadesini gösterecektir.
Aksi takdirde VBA'da "Çalışan bulunamadı" mesajını veren bir mesaj kutusu gösterilir .

İşte tam kod:
Sub BasicIndexMatch()
Dim employeeName As String
Dim rowIndex As Variant
employeeName = “John”
rowIndex = Application.Match(employeeName, Sheets(“Example_1”).Range(“A2:A5”), 0)
If Not IsError(rowIndex) Then
Cells(rowIndex + 1, 2).Value = “Salary: ” & Application.Index(Sheets(“Example_1”).Range(“B2:B5”), rowIndex)
Else
MsgBox “Çalışan bulunamadı.”
End If
End Sub
Örnek 2
Bu örnekte, 'SalesData' sayfasında 'Monitor' ifadesini aramak ve karşılık gelen değeri görüntülemek için bir ölçüt ile VBA Match Index'i kullanacağız.

- Adım 1: Yeni bir alt rutin oluşturarak ve aşağıdaki iki değişkeni bildirerek başlıyoruz:
- searchValue : Bu değişken Excel verilerinde aramak istediğimiz değeri saklayacaktır.
- result: Bu değişken, Dizin Eşleştirme işleminin sonucunu saklayacaktır.

- Adım 2: Burada, searchValue değişkenine “Monitor” değerini atıyoruz. Excel verilerinde bulmak istediğimiz değerdir.

- Adım 3 : Ana Endeks Eşleştirme işleminin gerçekleştiği yer burasıdır:
“Application.Match(searchValue, Sheets(“SalesData”).Range(“A2:A5”), 0)”:
Kodun bu bölümü Match işlemini gerçekleştirir. "SalesData" çalışma sayfasının A2:A5 aralığında searchValue ("Monitor") içindeki değeri arar. 0 olan son argüman mükemmel bir eşleşmeyi belirtir.
“Application.Index(Sheets(“SalesData”).Range(“B2:B5”), … )”:
Kodun bu bölümü Eşleşme işlemini gerçekleştirir. A sütununda eşleşmenin bulunduğu satıra dayanarak, B2:B5 aralığındaki karşılık gelen değeri “SalesData” çalışma sayfasında arar.

- Adım 4: "If" ifadesi sonucun bir hata içerip içermediğini kontrol eder. Eğer içermiyorsa, Index Match işleminin eşleşen bir değer bulduğu anlamına gelir.

- Adım 5: Bu satır, sonucun hatasız olması durumunda, yani bir eşleşme bulunduğunda, VBA Dizin Eşleştirme işleminin sonucunun ardından "Değer:" değerine sahip bir ileti kutusu gösterir.
Örneğin, “Monitör” bulunursa ve B sütunundaki eşleşen değer 200$ ise, mesaj kutusu “Değer: 200$” diyecektir.

- Adım 6: Sonuç bir hata içeriyorsa (yani eşleşme bulunamadıysa), kodun bu kısmı “Değer bulunamadı” metnini içeren bir ileti kutusu görüntüler.

- Adım 7: Makroyu kaydedin ve çalıştır'a tıklayın.
"Monitor" bulunursa, kodu çalıştırdığınızda bir mesaj kutusunda 'Değer: [Monitor'un karşılık gelen değeri]' görünecektir.
Aksi takdirde 'Değer bulunamadı' mesajı gösterilecektir.

İşte tam kod:
Sub IndexMatchWithValue()
Dim searchValue As String
Dim result As Variant
searchValue = “Monitor”
result = Application.Index(Sheets(“SalesData”).Range(“B2:B5”), Application.Match(searchValue, Sheets(“SalesData”).Range(“A2:A5”), 0))
If Not IsError(result) Then
MsgBox “Value: ” & result
Else
MsgBox “Değer bulunamadı.”
End If
End Sub
Örnek 3
Bu örnekte, geçerli çalışma kitabının 3. Sayfasında belirli ölçütleri aramak için, yani "VBA Dizin Eşleşmesi.xlsm", ilgili verileri farklı bir Excel çalışma kitabı olan "Çalışma Kitabı2"den almak üzere başka bir çalışma kitabından VBA Dizin Eşleşmesini kullanırız.
Çalışma Kitabı1

Çalışma Kitabı2

- Adım 1: Yeni modülde, bir alt rutin oluşturarak ve aşağıdaki iki değişkeni atayarak başlıyoruz:
- criteria: Bu değişken, geçerli çalışma kitabından elde edilen kriterleri (aranacak değeri) depolayacaktır.
- rowIndex: Bu değişken Match işleminin sonucunu saklayacaktır.

- Adım 2: Burada, geçerli çalışma kitabındaki (ThisWorkbook) “Index_Match_Example” hücresindeki A2 hücresinden ölçütü (aranacak değeri) alıyoruz.

- Adım 3: Ana Endeks Eşleştirme işleminin gerçekleştiği yer burasıdır.
Eşleşme işlemi kodun bu bölümü tarafından gerçekleştirilir. Verilen aralıkta (A2:A100), daha önce harici çalışma kitabı “Workbook2.xlsx”in “Sheet1”inde elde edilen kriter değerini arar. 0 olan son argüman mükemmel bir eşleşmeyi belirtir.

- Adım 4: Bu If ifadesi, “rowIndex”in bir hata içerip içermediğini kontrol eder. Eğer rowIndex bir hata içermiyorsa, bu, Index Match işleminin eşleşen bir satır bulduğu anlamına gelir.

- Adım 5: Bir eşleşme bulunduğunda ve “rowIndex” bir hata içermediğinde, bu satır “Workbook2'den Veriler: ” yazan bir ileti kutusu ve ardından “Workbook2.xlsx” dosyasının “Sheet1”indeki karşılık gelen satırın B sütununda bulunan değeri gösterir.
Excel'de başlık satırını hesaba katmak için rowIndex artı 1 kullanılarak veriler alınır.

- Adım 6: “rowIndex” bir hata içeriyorsa (yani eşleşme bulunamadıysa), kodun bu kısmı “Workbook2'de veri bulunamadı” metnini içeren bir ileti kutusu görüntüler.

- Adım 7: Makroyu kaydedin ve çalıştır'a tıklayın.
Kodu çalıştırdıktan sonra bir eşleşme bulunursa, kod 'Çalışma Kitabı2'den Veriler: [Veriler alındı]' mesajını görüntüler.
Eşleşme bulunamazsa, “Workbook2’de veri bulunamadı” olarak gösterilecektir.

İşte tam kod:
Sub IndexMatchFromAnotherWorkbook()
Dim criteria As String
Dim rowIndex As Variant
criteria = ThisWorkbook.Sheets(“Index_Match_Example”).Cells(2, 1).Value
rowIndex = Application.Match(criteria, Workbooks(“Workbook2.xlsx”).Sheets(“Sheet1”).Range(“A2:A100”), 0)
If Not IsError(rowIndex) Then
MsgBox “Data from Workbook2: ” & Workbooks(“Workbook2.xlsx”).Sheets(“Sheet1”).Cells(rowIndex + 1, 2).Value
Else
MsgBox “Workbook2'de veri bulunamadı.”
End If
End Sub
Dikkat Edilmesi Gereken Önemli Noktalar
- Excel'in VBA Index Match'i veri arama ve alma işlemlerini gerçekleştirmek için güçlü ve uyarlanabilir bir yol sunar.
- Aramanızı daha da daraltmak için, VBA Endeks Eşleştirmesini kullanarak VBA kodunda “AND” ve “OR” gibi mantıksal operatörleri kullanarak birden fazla ölçüt koşulunu birleştirebilirsiniz.
- VBA Dizin Eşleştirme döngüsünü kullanarak, büyük veri kümeleri üzerinde zaman alıcı Dizin Eşleştirme işlemlerini otomatikleştirebilir veya art arda birkaç arama gerçekleştirebilirsiniz.
