Excel'de VBA Gelişmiş Filtre Nasıl Oluşturulur?
VBA Gelişmiş Filtre oluşturmak için şu adımları izleyin.
- 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.

- Değişkenleri Tanımla: Veri aralığına, ölçüt aralığına ve kopyalama hedefine referansları tutacak değişkenleri bildirin.
Örneğin:
Dim rngData As Range, rngCriteria As Range, rngCopyTo As Range - Aralık Başvurularını Ayarla: Değişkenleri çalışma sayfasındaki belirli aralıklara başvuracak şekilde ayarlayın.
Örneğin:
rngData = Sheet1.Range(“A1:B10”) olarak ayarlayın rngCriteria = Sheet1.Range(“E1:F3”) olarak ayarlayın rngCopyTo = Sheet2.Range(“A1”) olarak ayarlayın - Gelişmiş Filtre Uygula: Verileri belirtilen ölçütlere göre filtrelemek için Gelişmiş Filtre yöntemini kullanın.
Örneğin:
rngData.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=rngCriteria, CopyToRange:=rngCopyTo, Unique:=False - Kodu Çalıştırın: VBA kodunu çalıştırmak için F5 tuşuna basın veya Çalıştır menüsüne gidin ve “Alt/Kullanıcı Formunu Çalıştır” seçeneğini seçin.
- Sonuçları Doğrula: Filtrelenen sonuçların doğru şekilde kopyalandığından emin olmak için belirtilen hedef aralığını kontrol edin.
Örnek #1 – Çoklu Kriterlerle Gelişmiş Filtreleme
Diyelim ki "Sheet1"de A'dan C'ye kadar sütunlarda veriler bulunan bir veri kümemiz var. E1'den F2'ye kadar hücrelerde sağlanan kriterlere göre filtrelemek ve filtrelenen sonuçları H1 hücresine kopyalamak istiyoruz. Birden fazla kritere sahip gelişmiş bir VBA filtresi kullanarak bunu başarabiliriz.

Adım 1: Yeni modülde öncelikle bir alt rutin oluşturuyoruz ve ardından aşağıdaki değişkenleri tanımlıyoruz.
Burada dört değişken tanımlanmıştır: üç Range nesnesi (rngData, rngCriteria, rngCopyTo) ve bir Worksheet nesnesi (ws).
- rngData filtrelemek istediğiniz verileri içeren aralığa referans verecektir.
- rngCriteria, filtre kriterlerini içeren aralığa referans verecektir.
- rngCopyTo, filtrelenen verilerin kopyalanacağı başlangıç hücresine referans verecektir.
- 'ws' verilerinizi ve ölçütlerinizi içeren çalışma sayfasına başvuracaktır.

Adım 2: Bu adımda, "ws" değişkenini çalışma kitabının Sheet3'üne referans verecek şekilde ayarlayacağız. Verilerinizin ve ölçüt aralıklarınızın bulunduğu yer burasıdır.

Adım 3: Bu adımda aşağıdaki aralıkları tanımlıyoruz:
- rngData, veri kümenizin bulunduğu A1:C10 aralığına ayarlanır.
- rngCriteria, verileri filtrelemek için kriterleri içeren E1:F2 aralığına ayarlanır.
- rngCopyTo, filtrelenen sonuçların kopyalanacağı H1 hücresine ayarlanır.

Adım 4: Filtreyi uygulamadan ve yeni verileri kopyalamadan önce, filtrelenmiş sonuçların yerleştirileceği alandaki mevcut verileri temizlemek için “Temizle”yi kullanacağız.
“CurrentRegion”, boş satırlar ve boş sütunların herhangi bir kombinasyonuyla sınırlanmış bir aralık döndüren bir özelliktir. Hedef aralığın, eski verilerle çakışmadan veya karışmadan yeni verileri almaya hazır olmasını sağlar.

Adım 5: Son olarak VBA gelişmiş filtre özelliğini uyguluyoruz.
- Action:=xlFilterCopy, filtrelenen verilerin başka bir konuma kopyalanması gerektiğini belirtir (yerinde filtrelemenin aksine).
- CriteriaRange:=rngCriteria, filtreleme için kriterleri içeren aralığı belirtir.
- CopyToRange:=rngCopyTo, filtrelenen verilerin kopyalanacağı aralığı belirtir.
- Unique:=False, yinelenen satırların filtrelenmiş sonuçlara dahil edilebileceğini belirtir. True olarak ayarlanırsa, yalnızca ölçütleri karşılayan benzersiz satırlar kopyalanır.

Adım 6: Şimdi makroyu kaydedin ve kodu çalıştırın. Excel, E1:F2 aralığında belirtilen kriterlere göre Sayfa 3'teki A1:C10 aralığındaki verileri filtreleyecektir.
Filtrelenen sonuçlar daha sonra aynı sayfadaki H1 hücresinden başlayan alana kopyalanacaktır.

Sub AdvancedFilterMultipleCriteria()
Dim rngData As Range
Dim rngCriteria As Range
Dim rngCopyTo As Range
Dim ws As Worksheet
Set ws = Sheets(“Sheet1”)
Set rngData = ws.Range(“A1:C10”) ‘ Data range
Set rngCriteria = ws.Range(“E1:F2”) ‘ Criteria range
Set rngCopyTo = ws.Range(“H1”) ‘ Destination range
rngCopyTo.CurrentRegion.Clear
rngData.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=rngCriteria, CopyToRange:=rngCopyTo, Unique:=False
End Sub
Örnek #2 – Joker Karakterlerle Gelişmiş Filtreleme
Bu örnekte, gerekli verileri filtrelemek için joker karakterlerle VBA Gelişmiş filtrelerinin nasıl kullanılacağını göreceğiz.

Adım 1: Önceki örnekte olduğu gibi, öncelikle bir alt rutin oluşturuyoruz ve ardından değişkenleri bildiriyoruz.

Bu örnekte, her biri “Range” türünde olan dataRange, criteriaRange ve copyToRange adlı üç değişken bildiriyoruz.
Bu değişkenler daha sonra Excel çalışma sayfasındaki belirli alanlara referans vermek için kullanılacaktır: sırasıyla filtrelenecek verileri içeren aralık, filtre ölçütlerini içeren aralık ve filtrelenmiş sonuçların kopyalanacağı aralık.
Adım 2: Bu adımda veri aralığını tanımlıyoruz. “Set” anahtar sözcüğü bir nesne referansını bir değişkene atamak için kullanılır.
Burada, geçerli çalışma kitabının (ThisWorkbook) Sheet1'indeki A1:B50 aralığını “dataRange” değişkenine atar.

Adım 3: Bu kod satırı, Sheet1'deki E1:E2 aralığını "criteriaRange" değişkenine atar. Bu aralık, filtreleme ölçütlerinizi belirttiğiniz yerdir.

Adım 4: Bu satır, filtrelenmiş sonuçların kopyalanacağı Sheet1'deki hedef aralığın sol üst hücresini (bu durumda H1) ayarlar ve bunu copyToRange değişkenine atar.

Adım 5: Daha sonra, önceki örnekte olduğu gibi VBA Gelişmiş Filtresini uygularız.

Adım 6: Şimdi, bu kodu çalıştırdığınızda Excel, belirtilen “dataRange” içindeki verileri, criteriaRange içinde ayarlanan kriterlere göre filtreler. Kriterimiz *Sr olduğundan, veri aralığında “Sr.” ile başlayan herhangi bir İş Ünvanı arar.
Filtrelenen sonuçlar daha sonra copyToRange konumundan başlayarak bu örnekte H1 konumundan kopyalanır.

Sub UseAdvancedFilterWithWildcard()
Dim dataRange As Range
Dim criteriaRange As Range
Dim copyToRange As Range
Set dataRange = ThisWorkbook.Sheets(“Sheet1”).Range(“A1:B50”)
Set criteriaRange = ThisWorkbook.Sheets(“Sheet1”).Range(“E1:E2”)
Set copyToRange = ThisWorkbook.Sheets(“Sheet1”).Range(“H1”)
dataRange.AdvancedFilter Action:=xlFilterCopy, criteriaRange:=criteriaRange, copyToRange:=copyToRange, Unique:=False
End Sub
Örnek #3 – Gelişmiş Filtreleme Benzersiz Değerler
Bu örnekte, yalnızca benzersiz verileri filtrelemek ve başka bir hücreye kopyalamak için VBA gelişmiş filtrelerinin nasıl kullanılacağını göreceğiz.

Adım 1: Öncelikle veri aralığı ve kopyalama hedefi için değişkenler önceki örneklerde olduğu gibi tanımlanır.

Adım 2: Daha sonra rngData (A1 ila A10 hücreleri) ve rngCopyTo (Sheet5'teki C1 hücresi) için belirli aralıklar ayarlıyoruz.

Adım 3: Bu adımda, VBA Gelişmiş Filtre yöntemini uygularız. rngData'dan benzersiz değerleri filtreler ve bunları rngCopyTo'ya (Sheet5) kopyalar. Benzersiz parametresi True olarak ayarlanır.

Adım 4: Kodu çalıştırdığınızda, rngData'dan benzersiz değerleri filtreler ve bunları Sheet1'deki rngCopyTo'ya kopyalar.

Sub AdvancedFilterUniqueValues()
Dim rngData As Range
Dim rngCopyTo As Range
Set rngData = Sheet5.Range(“A1:A10”) ‘ Data range
Set rngCopyTo = Sheet5.Range(“C1”) ‘ Destination range
rngData.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=rngCopyTo, Unique:=True
End Sub
Örnek #4 – VE Kriterleri ile VEYA Kriterlerinin Birleştirilmesi
Bu örnekte VBA Gelişmiş filtresinin “Ve” ve “Veya” ölçütleriyle birleştirilerek nasıl kullanılacağını göreceğiz.

Adım 1: Bu adımda, aralıkları ve çalışma sayfalarını depolamak için değişkenler bildiriyoruz. rngData, rngCriteria ve rngCopyTo sırasıyla veri aralığına, ölçüt aralığına ve hedef aralığına referanslar tutacaktır.
“ws” filtrelemenin uygulanacağı çalışma sayfasına bir referans depolayacaktır.

Adım 2: Burada, Sheets koleksiyonunu ve sayfa adını bir dize olarak kullanarak “Meyve Verileri” adlı çalışma sayfasına çalışma sayfası referansını (ws) ayarlıyoruz.

Adım 3: 'ws' ile başvurulan çalışma sayfasında A1:C10 aralığını belirterek veri aralığını (rngData) tanımlarız.

Adım 4: Burada, aynı çalışma sayfasında E1:F3 aralığını belirterek kriter aralığını (rngCriteria) tanımlarız. Bu aralık, AND ve OR kriterleri dahil olmak üzere filtreleme kriterlerini içerir .

Adım 5: Filtrelenmiş sonuçların kopyalanacağı hedef aralığını (rngCopyTo) tanımlarız. Bu durumda, aynı çalışma sayfasındaki H1 hücresidir.

Adım 6: Filtreyi uygulamadan önce, hedef aralıktaki önceki filtre sonuçları temizlenerek yeni sonuçlar için temiz bir sayfa açılır.

Adım 7: Bu adımda, rngCriteria'da belirtilen kriterlere göre filtreyi uygulamak için VBA Gelişmiş Filtre yöntemini kullanıyoruz.
Filtrelenen sonuçlar daha sonra rngCopyTo'da belirtilen hedef aralığına kopyalanır.

Adım 8: Burada, filtrenin uygulandığını kullanıcıya göstermek ve belirtilen hedef aralığındaki sonuçları kontrol etmek için VBA'da bir mesaj kutusu kullanıyoruz .

Adım 9: Şimdi makroyu kaydedin. Kod çalıştırıldığında, yukarıda belirtilen adımları gerçekleştirir, verileri belirtilen ölçütlere göre filtreler ve filtrelenen sonuçları hedef aralığa kopyalar.
Daha sonra kullanıcıdan belirtilen hücredeki sonuçları kontrol etmesi istenir.

Sub AdvancedFilterANDORCriteria()
Dim rngData As Range
Dim rngCriteria As Range
Dim rngCopyTo As Range
Dim ws As Worksheet
Set ws = Sheets(“Fruit Data”)
Set rngData = ws.Range(“A1:C20”) ‘ Data range
Set rngCriteria = ws.Range(“E1:F4”) ‘ Criteria range with AND and OR criteria
Set rngCopyTo = ws.Range(“H1”) ‘ Destination range
rngCopyTo.CurrentRegion.Clear
rngData.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=rngCriteria, CopyToRange:=rngCopyTo, Unique:=False
MsgBox “Filter applied. Check the results in cell ” & rngCopyTo.Address
End Sub
