VBA Gelişmiş Filtre

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ş

wave wave wave wave wave