Excel VBA Otomatik Filtre
Benzer şekilde, VBA'da veriler üzerinde çeşitli filtrelemeler yapmak için bir otomatik filtremiz var. Bu makalede, VBA otomatik filtresinde yer alan tüm süreci ele alacağız.
ÖNEMLİ NOTLAR
- VBA Otomatik Filtre, çalışma sayfasındaki Filtre seçeneğine benzer şekilde çalışır.
- Verilen sütun numarasından itibaren verileri filtreler.
- Operatör argümanını kullanarak tek bir sütundan birden fazla değeri filtreleyebiliriz.
- Ayrıca hem metin değerlerini hem de sayısal değerleri filtreleyebiliriz.
- AutoFilterMode'u kullanarak otomatik filtrenin durumunu kontrol edebiliriz.
- VBA Otomatik Filtreleme, verilen sütun numarası veri aralığında değilse “Aralık sınıfının Otomatik Filtreleme yöntemi başarısız oldu” hatasını verecektir.
AutoFilter Fonksiyonunun Sözdizimi
Otomatik Filtre fonksiyonunun sözdizimi aşağıdadır.
Range(“Data Range”).AutoFilter( [Field] , [Criteria1] , [Operator] , [Criteria2] , [VisibleDropDown])
Range(“Date Range”): İlk olarak, RANGE nesnesini kullanarak filtreyi uygulamak için veri aralığını sağlamamız gerekiyor.
[Field]: [İsteğe Bağlı Argüman] Bu argümanda, Excel VBA'da Otomatik Filtre uygulayacağımız sütun numarasını sağlamamız gerekir. Sütun numarası, veri aralığının sol tarafından sayılmalıdır.
[Kriter1]: [İsteğe Bağlı Argüman] Verilen sütun numarasında, çift tırnak içinde filtreleyeceğimiz değeri belirteceğiz.
[Operatör]: [İsteğe Bağlı Argüman] [Kriter2]'yi kullanacaksak bu operatör argümanını kullanmamız gerekir. Operatör sembollerini kullanarak kriter 1 ve kriter 2'yi birleştirebiliriz. Operatör argümanında kullanılabilen operatörler şunlardır:
xlVe, xlOr, xlAlt10Öğe, xlÜst10Öğe, xlAlt10Yüzde, xlÜst10Yüzde, xlFilterHücreRengi, xlFilterDinamik, xlFilterYazı TipiRengi, xlFilterSimgesi, xlFilterDeğerleri
[Kriter2]: [İsteğe Bağlı Argüman] Bu, kriter1 ile birlikte verileri filtrelediğimiz ikinci kriterdir.
[VisibleDropDown]: [İsteğe Bağlı Argüman] Otomatik filtre fonksiyonunun bu argümanını kullanarak, filtre açılır seçeneğinin filtreleme sütununda görünür olup olmayacağını belirtebiliriz. TRUE veya FALSE'ı belirtebiliriz.
Tüm argümanlar isteğe bağlı olduğundan, argümanları belirtmezsek, yalnızca filtre simgelerini uygulayacaktır (eğer filtre simgeleri zaten varsa, o simgeleri kaldıracaktır).
Eğer filtre daha önceden bazı sütunlara uygulanmışsa, verilen aralıktaki tüm filtreler kaldırılacak ve tüm veriler gösterilecektir.
VBA AutoFilter Kullanılarak Filtre Nasıl Uygulanır ?
VBA Otomatik Filtre uygulamasının bazı örneklerine bakalım.
Örnek 1 – Otomatik Filtre Kullanarak Verileri Filtreleme
Örneğin, VBA otomatik filtresinin tüm örneklerinde kullanacağımız aşağıdaki verilere bakalım.
Veri aralığı A1'den G101'e kadardır ve veri tablosunda 7 sütun bulunmaktadır.
Sadece Online satış kanalına ait verileri Satış Kanalı'nda filtrelememiz gerektiğini varsayalım .
Adım 1 – Alt prosedürde RANGE nesnesini girin ve veri aralığını çift tırnak içinde A1:G101 şeklinde belirtin.

Adım 2 – Aralık sağlandıktan sonra noktayı girin ve IntelliSense listesinden Otomatik Filtre seçeneğini seçin.

Adım 3 – VBA Otomatik Filtre seçeneğini seçtikten sonra otomatik filtre fonksiyonunun aşağıdaki argümanlarını görebiliriz.

Adım 4 – VBA otomatik filtre fonksiyonunun ilk argümanı Alan'dır , yani filtreyi hangi sütuna uygulamamız gerekiyor?
Filtreyi Satış Kanalı sütununa uyguladığımız için sütun numarası 3 olacaktır çünkü A1:G101 veri aralığında satış kanalı sütunu 3. sırada yer almaktadır.

Adım 5 – Sonra, verilen sütundan hangi değeri filtreleyeceğimizi belirtmemiz gerekiyor. Daha önce belirtildiği gibi, yalnızca Çevrimiçi satış kanalını filtreleyeceğiz. Bu nedenle, Kriter1 argümanı için kriteri çift tırnak içinde Çevrimiçi olarak verin.

Kodu çalıştırdığımızda aşağıdaki gibi filtrelenmiş verileri göreceğiz:

Görüldüğü gibi filtreyi satış kanalı sütununa uygulamış durumdayız ve veri aralığında sadece Online satış kanalını görebiliyoruz.
Örnek 2 – AutoFilter'daki Operatör
Artık VBA'da Otomatik Filtre'nin nasıl uygulanacağını biliyoruz. VBA Otomatik Filtresi için diğer argümanları daha fazla inceleyelim.
Örneğin, şimdi verileri Öğe Türüne göre filtrelememiz gerektiğini varsayalım.

Adım 1 – Ev ve Sebzeler öğe türlerini filtrelememiz gerektiğini varsayalım . Bu iki filtreleme değerini kriter 1'in kendisinde sağlayamayız. Bu nedenle, birden fazla öğeyi filtrelemek için operatör simgesini kullanmamız gerekir.
Alan numarası 2 olacaktır çünkü öğe türü verilen veri aralığındaki 2. sütundur .

Adım 2 – Criteria1 argümanında filtreleme değerini Hanehalkı olarak belirtin .

Adım 3 – Aynı sütundaki bir değeri daha filtreleyeceğimiz için operatör argüman girişini kullanacağız.
VBA'da bulunan operatör sabitlerine argüman adı Operatörünü girin, ardından iki nokta üst üste (:) ve eşittir işareti (=) ekleyin.

Operatör argümanı ile çeşitli operatör sabitlerimiz var ve gereksinime göre bunlardan herhangi birini seçebiliriz.
Adım 4 – İki değeri filtreleyeceğimiz için xlOr operatör sembolünü seçeceğiz .

Adım 5 – Sonra, Criteria2 argümanı için girdiyi Vegetables olarak sağlayabiliriz .

Adım 6 – Kodu çalıştıralım, Item Type sütunundaki verilen değerleri filtrelemeli .

Öğe Türü sütunundan yalnızca Ev ve Sebze değerleri filtrelendi .
Örnek 3 – AutoFilter Kullanarak Sayıları Filtrele
Sadece metin değerleri değil, VBA'daki VBA Otomatik Filtreleme işlevini kullanarak sayıları da filtreleyebiliriz. Örneğin, önceki 2 örnekteki aynı verilerle çalışalım.
Adım 1 – Verileri, kar değerinin <10000 olduğu kar sütununa göre filtrelememiz gerektiğini varsayalım. Alanda, argüman sütunu 7 olarak sağlar çünkü Kar, veri aralığındaki 7. sütun numarasıdır.

Adım 2 – Ardından Kriter 1 için koşulu <10000 olarak belirtin .

Sub Example2_Auto_Filter()
Range("A1:G101").AutoFilter Field:=7, Criteria1:="<10000"End Sub
Bu, değerlerin 10000'den az olduğu kar değerine göre verileri filtreleyecektir.

Adım 3 – Benzer şekilde 10000 ile 30000 arasındaki değerleri filtrelemek için aşağıdaki görseldeki gibi kodu yazabiliriz.

Bu, 10000 ile 30000 arasındaki kar değerlerini filtreleyecektir.

Örnek 4 – AutoFilter Kullanarak Farklı Sütunlardan Filtreleme
Değerleri birden fazla sütuna göre de filtreleyebiliriz. Örneğin, Meyve ve Sebzeler için Çevrimiçi satışları filtrelememiz gerektiğini varsayalım . Ardından, kodu aşağıdaki şekilde yazabiliriz.

Dim Rng As Range
Öncelikle değişkeni tanımladık ve veri tipi olarak aralık nesnesini atadık.
Set Rng = Range(“A1:G101”)
RANGE bir nesne veri tipi olduğundan, VBA SET ifadesini kullandık ve Rng değişkenine hücre aralığını atadık.
With Rng
.AutoFilter Field:=3, Criteria1:=”Online”
.AutoFilter Field:=2, Criteria1:=”Fruits”, Operator:=xlOr, Criteria2:=”Vegetables”
End With
Birden fazla sütun için filtre uygulamamız gerektiğinden WITH ifadesini kullanırız. İlk VBA Otomatik Filtresinde, 3. ( Satış Kanalı) sütunu için ölçütü Çevrimiçi olarak atadık. Sonra, ikinci Otomatik Filtre için, 2. sütun (Ürün Türü) için filtreyi Meyveler VEYA Sebzeler olarak atadık .
Bu, Satış Kanalı ve Ürün Türü sütunları için filtreyi uygulayacak ve verilen kriter değerlerini filtreleyecektir.

VBA Kullanarak Excel Otomatik Filtrelemeyi AÇMA/KAPAMA
VBA Otomatik Filtreleme işlevinde, tüm argümanlar isteğe bağlıdır. Argümanın girdilerinden hiçbiri sağlanmazsa ne olacağını merak etmeliyiz.
Örneğin aşağıdaki koda bakalım.
Sub Auto_Filter()
Range("A1:G101").AutoFilterEnd Sub
VBA Otomatik Filtresi için herhangi bir argüman girdisi vermedik. Ve hiçbir filtre uygulanmadı.
Referans olması açısından, aşağıdaki görüntü, kodu çalıştırmadan önce verilerin nasıl göründüğünü göstermektedir.

Kodu çalıştıralım ve ne olacağını görelim.

Verilen veri aralığının tüm sütunlarına filtre simgeleri uygulandı.
Şimdi sütunlara bazı filtreler uygulayacağız.

Şimdi kodu çalıştıralım ve ne olacağını görelim.

Kodu çalıştırdığımızda, tüm sütunlardaki filtre simgeleri de dahil olmak üzere tüm filtreleri kaldırdı. Bu nedenle, filtreleri açmak veya kapatmak için herhangi bir argüman olmadan VBA Otomatik Filtre işlevini kullanabiliriz.
Otomatik Filtrenin Zaten Uygulanıp Uygulanmadığını Kontrol Edin
VBA Otomatik Filtresi'ni açıp kapatmamız gerektiğinde, Otomatik Filtre'nin zaten uygulanıp uygulanmadığını kontrol etmek önemlidir. Bu, Otomatik Filtre modu seçeneği kullanılarak yapılır.
Aşağıdaki kod, etkin sayfada Otomatik Filtre'nin çalışıp çalışmadığını kontrol edecektir.
Sub Check_Auto_Filter()
If ActiveSheet.AutoFilterMode = True Then
MsgBox "Auto Filter is already running"
Else
MsgBox "No auto fitlers are running"
End IfEnd Sub
Yukarıdaki kod, Otomatik Filtre zaten açıksa Otomatik Filtre zaten çalışıyor mesajını döndürecektir .

Eğer hiçbir VBA Otomatik Filtre çalışmıyorsa, o zaman şu mesaj kutusu döndürülür: Hiçbir otomatik filtre çalışmıyor .

Dikkat Edilmesi Gereken Önemli Noktalar
- VBA Otomatik filtrede, tüm argümanlar isteğe bağlıdır. Argümanlardan hiçbirini girmezsek, çalışmıyorsa verilen aralıktaki otomatik filtreyi açar veya çalışıyorsa otomatik filtreyi kapatır.
- Verileri iki veya daha fazla sütuna göre filtrelememiz gerektiğinde WITH ifadesini kullanmalıyız.
- VBA Otomatik Filtre yalnızca Aralık nesnesini kullanan hücre aralığıyla kullanılabilir.
- Sadece belirtilen hücre aralığındaki verileri filtreler.
Verileri hücre değerine göre filtrelemek için öncelikle bir ölçüt hücresi ayarlamamız gerekir. Örneğin, Avusturya ülkesi için verileri filtrelemek istiyorsak , ölçüt hücresini aşağıdaki resimde gösterildiği gibi ayarlayın.
Daha sonra kriter olarak hücre adresini J2 olarak verelim.
Artık veriler J2 hücre değerine göre filtrelenecektir.
Otomatik Filtre genellikle verilen sütun numarası veri aralığı içinde değilse bir hata verir. Örneğin, aşağıdaki verilerde 6 sütunumuz var.
Eğer alan argümanını 7 olarak verirsek, o zaman aşağıdaki hatayı alırız.
Yani verdiğimiz sütun numaralarının verilen veri aralığının sütun sayısı içerisinde olması gerekmektedir.
Tüm otomatik filtreleri temizlemek için, öncelikle Otomatik Filtrenin açık olup olmadığını kontrol etmemiz gerekir. Aşağıdaki kod, çalışma sayfasında Otomatik Filtrenin açık olup olmadığını kontrol edecektir. Açıksa, filtreyi çalışma sayfasından kaldıracaktır.
If ActiveSheet.AutoFilterMode Then
ActiveSheet.AutoFilterMode = False
End If
Hücre aralığına sahip ölçütlerle Otomatik Filtreleme yapmak için öncelikle hücrelerde ölçüt değerleri ayarlamamız gerekir. Ardından, tüm ölçüt değerlerini dizi değişkenine atamak için dizi işlevini kullanmamız ve Otomatik Filtreleme işlevinin ölçüt argümanında dizinin ölçüt argümanında dizi değişken adını kullanmamız gerekir.
