Bu eğitim, VBA'da Gelişmiş Filtre yönteminin nasıl kullanılacağını açıklayacaktır.
Excel'de Gelişmiş Filtreleme, aynı anda çeşitli filtreler uygulamak istediğiniz büyük miktarda veriyle uğraşırken çok kullanışlıdır. Ayrıca verilerinizden kopyaları kaldırmak için de kullanılabilir. VBA içinden Gelişmiş Filtre oluşturmaya çalışmadan önce Excel'de Gelişmiş Filtre oluşturmaya aşina olmanız gerekir.
Aşağıdaki çalışma sayfasını inceleyiniz.
Kaldırmak isteyebileceğiniz kopyalar olduğunu bir bakışta görebilirsiniz. Hesap türü, Tasarruf, Vadeli Kredi ve Çek'in bir karışımıdır.
Öncelikle gelişmiş filtre için bir ölçüt bölümü oluşturmanız gerekir. Bunu ayrı bir sayfada yapabilirsiniz.
Referans kolaylığı için veri sayfama 'Veritabanı' ve ölçüt sayfama 'Kriterler' adını verdim.
Gelişmiş Filtre Sözdizimi
Expression.AdvancedFilter Eylem, CriteriaRange, CopyToRange, Benzersiz
- NS İfade aralık nesnesini temsil eder - ve Aralık olarak ayarlanabilir (örn. Aralık(“A1:A50”) - veya Aralık bir değişkene atanabilir ve bu değişken kullanılabilir.
- NS Eylem argüman gereklidir ve xlFilterInPlace veya xlFilterCopy olur
- NS Ölçüt aralığı argümanı, filtrelenecek Kriterleri aldığınız yerdir (yukarıdaki Kriterler sayfamız). Örneğin, benzersiz değerler için filtreleme yapıyorsanız, bir ölçüte ihtiyacınız olmayacağından bu isteğe bağlıdır.
- NS Aralığı Kopyala argüman, filtre sonuçlarınızı nereye koyacağınızdır - yerinde filtreleyebilir veya filtre sonucunuzun alternatif bir konuma kopyalanmasını sağlayabilirsiniz. Bu aynı zamanda isteğe bağlı bir argümandır.
- NS Benzersiz argüman da isteğe bağlıdır - NS yalnızca benzersiz kayıtları filtrelemektir, YANLIŞ kriterleri karşılayan tüm kayıtları filtrelemektir - bunu atlarsanız varsayılan YANLIŞ.
Verileri Yerinde Filtreleme
Kriter sayfasında yukarıda gösterilen kriterleri kullanarak - bir tür "Tasarruf" ve "Cari" olan tüm hesapları bulmak istiyoruz. Yerinde filtreleme yapıyoruz.
123456789 | Alt CreateAdvancedFilter()Aralık Olarak Dim rngDatabaseDim rngCriteria As Range'veritabanını ve ölçüt aralıklarını tanımlayınSet rngDatabase = Sheets("Veritabanı").Range("A1:H50")Set rngCriteria = Sheets("Criteria").Range("A1:H3")'kriterleri kullanarak veritabanını filtreleyinrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaAlt Bitiş |
Kod, kriterleri karşılamayan satırları gizleyecektir.
Yukarıdaki VBA prosedüründe CopyToRange veya Unique argümanlarını dahil etmedik.
Verileri sıfırlama
Başka bir filtre çalıştırmadan önce mevcut olanı temizlememiz gerekiyor. Bu, yalnızca verilerinizi yerinde filtrelediyseniz çalışır.
12345 | Alt ClearFilter()Hatada Devam Et Sonraki'tüm verileri göstermek için filtreyi sıfırlayınActiveSheet.ShowAllDataAlt Bitiş |
Benzersiz Değerleri Filtreleme
Aşağıdaki prosedürde Unique argümanını ekledim ancak CopyToRange argümanını atladım. Bu argümanı dışarıda bırakırsanız, HERHANGİ BİRİ argüman için yer tutucu olarak virgül koymak zorunda
123456789 | Sub UniqueValuesFilter1()Aralık Olarak Dim rngDatabaseDim rngCriteria As Range'veritabanını ve ölçüt aralıklarını tanımlayınSet rngDatabase = Sheets("Veritabanı").Range("A1:H50")Set rngCriteria = Sheets("Criteria").Range("A1:H3")'kriterleri kullanarak veritabanını filtreleyinrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria,,TrueAlt Bitiş |
VEYA aşağıda gösterildiği gibi adlandırılmış argümanları kullanmanız gerekir.
123456789 | Sub UniqueValuesFilter2()Aralık Olarak Dim rngDatabaseDim rngCriteria As Range'veritabanını ve ölçüt aralıklarını tanımlayınSet rngDatabase = Sheets("Veritabanı").Range("A1:H50")Set rngCriteria = Sheets("Criteria").Range("A1:H3")'kriterleri kullanarak veritabanını filtreleyinrngDatabase.AdvancedFilter Eylem:=xlFilterInPlace, CriteriaRange:=rngCriteria, Unique:=TrueAlt Bitiş |
Yukarıdaki kod örneklerinin ikisi de aşağıda gösterildiği gibi aynı filtreyi çalıştıracaktır - yalnızca benzersiz değerlere sahip veriler.
CopyTo bağımsız değişkenini kullanma
123456789 | Alt CopyToFilter()Aralık Olarak Dim rngDatabaseDim rngCriteria As Range'veritabanını ve ölçüt aralıklarını tanımlayınSet rngDatabase = Sheets("Veritabanı").Range("A1:H50")Set rngCriteria = Sheets("Criteria").Range("A1:H3")'filtrelenmiş verileri alternatif bir konuma kopyalayınrngDatabase.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=rngCriteria, CopyToRange:=Range("N1:U1"), Unique:=TrueAlt Bitiş |
Gelişmiş Filtre kod satırındaki bağımsız değişkenlerin adlarını atlamış olabileceğimizi unutmayın, ancak adlandırılmış bağımsız değişkenlerin kullanılması, kodun okunmasını ve anlaşılmasını kolaylaştırır.
Aşağıdaki bu satır, yukarıda gösterilen prosedürdeki satırla aynıdır.
1 | rngDatabase.AdvancedFilter xlFilterCopy, rngCriteria, Range("N1:U1"), True |
Kod çalıştırıldıktan sonra, prosedürde belirtilen hedef konumda gösterilen filtrelenmiş verilerle orijinal veriler gösterilmeye devam eder.
Verilerden Yinelenenleri Kaldırma
Criteria argümanını atlayarak ve verileri yeni bir konuma kopyalayarak verilerden kopyaları kaldırabiliriz.
1234567 | Alt RemoveDuplicates()Aralık Olarak Dim rngDatabase'veritabanını tanımlaSet rngDatabase = Sheets("Veritabanı").Range("A1:H50")'veritabanını, benzersiz olarak true olarak ayarlanmış yeni bir aralığa filtreleyinrngDatabase.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("N1:U1"), Unique:=TrueAlt Bitiş |