Genel Bakış
AutoFilter (Otomatik Filtre), Range nesnesinin bir yöntemidir; bir veri aralığına filtre oklarını ekler ve verilen ölçüte uymayan satırları gizler. Elle yaptığınız Veri > Sırala ve Filtre Uygula > Filtre (Data > Sort & Filter > Filter) işleminin kodla yapılan karşılığıdır. Aynı adı taşıyan Worksheet.AutoFilter özelliği ise sayfadaki geçerli filtreyi ve ölçütlerini okumanızı sağlar.
Dönüş değeri: Yöntem değer döndürmez; sonucu sayfada gizlenen satırlardan görürsünüz.
Metin ölçütlerinde * (herhangi bir karakter dizisi) ve ? (tek karakter) joker karakterleri kullanılabilir. Tarihlerde ölçütü doğrudan metin olarak yazmak yerine tarihin sayısal seri değerini kullanmak (ör. CLng ile dönüştürmek) bölgesel ayar sorunlarını azaltır.
Makro çalışınca İzmir dışındaki satırlar gizlenir, filtre okları başlık satırında görünür. E2 hücresine görünen satır sayısı yazılır: 4. Sayım için Subtotal işlevinin 103 kodu kullanıldığından gizlenen satırlar sayıma katılmaz.
İki ölçüt birlikte uygulandığı için yalnızca hem Perakende bölümünde olan hem de satışı 5.000 ile 20.000 arasında kalan satırlar görünür. E2 hücresindeki görünen satışların toplamı: 34.800,00. İkinci AutoFilter çağrısı önceki Satış filtresini silmez, ona eklenir.
Makro çalışınca yalnızca Ankara ve Bursa depolarındaki satırlar görünür. Görünen veri satırı sayısı 6, FilterMode değeri ise DOĞRU olarak yazılır; bu değer filtrenin satır gizlediğini gösterir. İsterseniz sonradan FiltreyiTemizle yordamını çalıştırarak tüm satırları geri getirebilirsiniz.
Söz dizimi
Yöntemin genel biçimi aşağıdadır. Tüm bağımsız değişkenler isteğe bağlıdır:Aralık.AutoFilter Field, Criteria1, Operator, Criteria2, VisibleDropDown, SubField
- Field: Filtrelenecek sütunun, aralığın en solundaki sütuna göre sıra numarası (1'den başlar). Sayfadaki sütun harfi değil, aralık içindeki sıra önemlidir. İsteğe bağlı.
- Criteria1: Ölçüt. Metin, sayı ya da ">5000" gibi işleç içeren bir dizge olabilir. xlFilterValues ile birlikte bir dizi (Array) de verilebilir. Belirtilmezse o alanın tüm değerleri gösterilir. İsteğe bağlı.
- Operator: Ölçütün türünü belirleyen XlAutoFilterOperator sabiti. Belirtilmezse tek ölçüt olarak değerlendirilir. İsteğe bağlı.
- Criteria2: İkinci ölçüt. Operator olarak xlAnd ya da xlOr ile birlikte kullanılır. İsteğe bağlı.
- VisibleDropDown: True ise o alanın filtre oku görünür, False ise gizlenir; varsayılanı True'dur. İsteğe bağlı.
- SubField: Veri türü içeren sütunlarda filtrelenecek alt alan. İsteğe bağlı.
Dönüş değeri: Yöntem değer döndürmez; sonucu sayfada gizlenen satırlardan görürsünüz.
Operator sabitleri
Operator bağımsız değişkeni için kullanabileceğiniz başlıca sabitler şunlardır:- xlAnd (1): Criteria1 ve Criteria2 aynı anda sağlanmalıdır; aralık süzmek için kullanılır.
- xlOr (2): İki ölçütten biri sağlanırsa satır görünür.
- xlTop10Items (3): En büyük N değeri gösterir; N, Criteria1 ile verilir.
- xlBottom10Items (4): En küçük N değeri gösterir.
- xlTop10Percent (5): En büyük yüzde N dilimini gösterir.
- xlBottom10Percent (6): En küçük yüzde N dilimini gösterir.
- xlFilterValues (7): Criteria1 olarak verilen dizideki değerlerin tümünü gösterir; birden çok değer seçmenin yoludur.
- xlFilterCellColor (8): Hücre dolgu rengine göre süzer; renk Criteria1 ile verilir.
- xlFilterFontColor (9): Yazı rengine göre süzer.
- xlFilterIcon (10): Koşullu biçimlendirme simgesine göre süzer.
- xlFilterDynamic (11): Bugün, Bu Ay ya da Ortalamanın Üstü gibi dinamik ölçütlerle süzer; ölçüt xlFilterToday, xlFilterThisMonth, xlFilterAboveAverage gibi sabitlerle verilir.
Ölçüt yazımı
Criteria1 ve Criteria2 dizge olarak yazıldığında başındaki işleç ölçütün anlamını belirler. Aşağıdaki örnekler sık kullanılan biçimleri gösterir:
VBA
6 satır
Criteria1:="İzmir" ' değeri İzmir olanlar
Criteria1:="<>İzmir" ' İzmir olmayanlar
Criteria1:=">=5000" ' 5000 ve üzeri
Criteria1:="A*" ' A ile başlayanlar (* joker karakter)
Criteria1:="=" ' boş hücreler
Criteria1:="<>" ' boş olmayan hücreler
Filtreyi denetleme ve kaldırma
Filtrenin durumunu ve kaldırılmasını şu öğelerle yönetirsiniz:- Worksheet.AutoFilterMode: Sayfada filtre okları varsa True döner. False atamak filtreyi tümüyle kaldırır ve gizli satırları geri getirir.
- Worksheet.FilterMode: Salt okunur; sayfada ölçüte göre satır gizlenmişse True döner.
- Worksheet.ShowAllData: Filtre oklarını bırakır, yalnızca gizlenen satırları gösterir. Filtre uygulanmamışken çağrılırsa hata verir; önce FilterMode değerini denetleyin.
- Worksheet.AutoFilter: Geçerli filtre nesnesidir. Range özelliği filtrelenen aralığı, Filters koleksiyonu her alanın On, Criteria1 ve Operator bilgilerini verir.
1. Metin ölçütüyle şehre göre süzme
Bir sayfada A1:D11 aralığında şehir bazlı satış listesi var. Aşağıdaki makroyu standart bir modüle (Ekle > Modül) yapıştırın. Makro Şehir sütununu İzmir olarak süzer ve görünen satır sayısını E2 hücresine yazar.
VBA
16 satır
Option Explicit
' Satış listesini İzmir'e göre süzer ve görünen satırları sayar
Sub IzmirFiltrele()
Dim ws As Worksheet
Set ws = ActiveSheet
' Varsa önceki filtreyi kaldır
If ws.AutoFilterMode Then ws.AutoFilterMode = False
' 1. sütun (Şehir) değeri İzmir olan satırları göster
ws.Range("A1:D11").AutoFilter Field:=1, Criteria1:="İzmir"
' Görünen veri satırı sayısı (başlık hariç)
ws.Range("E2").Value = Application.WorksheetFunction.Subtotal(103, ws.Range("A2:A11"))
End Sub
AutoFilter
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Şehir | Ürün | Adet | Tutar | Sonuç |
| 2 | İzmir | Klavye | 12 | 3.600,00 | 4 |
| 3 | Ankara | Fare | 25 | 2.500,00 | |
| 4 | İstanbul | Monitör | 8 | 24.000,00 | |
| 5 | İzmir | Fare | 15 | 1.500,00 | |
| 6 | Bursa | Klavye | 10 | 3.000,00 | |
| 7 | Ankara | Monitör | 5 | 15.000,00 | |
| 8 | İzmir | Monitör | 6 | 18.000,00 | |
| 9 | İstanbul | Klavye | 20 | 6.000,00 | |
| 10 | Bursa | Fare | 30 | 3.000,00 | |
| 11 | İzmir | Klavye | 9 | 2.700,00 |
Satış ListesiExcelDepo v1.0.0
2. Aralık ve ikinci alan ölçütü
A1:D11 aralığında personelin aylık satışları var. Kodu standart bir modüle yapıştırın. Makro Satış sütununda 5.000 ile 20.000 arasındaki değerleri, Bölüm sütununda ise yalnızca Perakende satırlarını bırakır; görünen satışların toplamını E2 hücresine yazar.
VBA
19 satır
Option Explicit
' Satış tutarı 5000-20000 arası ve bölümü Perakende olanları süzer
Sub AralikVeBolumFiltresi()
Dim ws As Worksheet
Set ws = ActiveSheet
If ws.AutoFilterMode Then ws.AutoFilterMode = False
With ws.Range("A1:D11")
' 4. sütun (Satış): iki ölçüt xlAnd ile birleştirilir
.AutoFilter Field:=4, Criteria1:=">=5000", Operator:=xlAnd, Criteria2:="<=20000"
' 2. sütun (Bölüm): ikinci filtre ilkine VE ile eklenir
.AutoFilter Field:=2, Criteria1:="Perakende"
End With
' Görünen satışların toplamı (109 = gizli satırları yok sayan TOPLA)
ws.Range("E2").Value = Application.WorksheetFunction.Subtotal(109, ws.Range("D2:D11"))
End Sub
AutoFilter
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Personel | Bölüm | Ay | Satış | Sonuç |
| 2 | Ayşe Yılmaz | Perakende | Ocak | 8.500,00 | 34.800,00 |
| 3 | Mehmet Demir | Kurumsal | Ocak | 32.000,00 | |
| 4 | Fatma Kaya | Perakende | Şubat | 4.200,00 | |
| 5 | Ali Çelik | Kurumsal | Şubat | 15.000,00 | |
| 6 | Zeynep Arslan | Perakende | Mart | 19.500,00 | |
| 7 | Can Öztürk | Kurumsal | Mart | 5.000,00 | |
| 8 | Elif Şahin | Perakende | Nisan | 21.000,00 | |
| 9 | Burak Aydın | Kurumsal | Nisan | 12.000,00 | |
| 10 | Selin Koç | Perakende | Mayıs | 6.800,00 | |
| 11 | Murat Polat | Kurumsal | Mayıs | 3.900,00 |
Personel SatışıExcelDepo v1.0.0
3. Birden çok değer ve FilterMode
A1:D11 aralığında depolara göre stok listesi var. Kodu standart bir modüle yapıştırın. DepoListesiFiltrele Ankara ve Bursa depolarını xlFilterValues ile birlikte gösterir; görünen satır sayısını E2, filtrenin etkin olup olmadığını F2 hücresine yazar. FiltreyiTemizle yordamı gizli satırları geri getirir.
VBA
26 satır
Option Explicit
' Depo sütununda yalnızca Ankara ve Bursa satırlarını gösterir
Sub DepoListesiFiltrele()
Dim ws As Worksheet
Set ws = ActiveSheet
If ws.AutoFilterMode Then ws.AutoFilterMode = False
' 4. sütun (Depo): birden çok değer için Array ve xlFilterValues
ws.Range("A1:D11").AutoFilter Field:=4, _
Criteria1:=Array("Ankara", "Bursa"), Operator:=xlFilterValues
' Görünen veri satırı sayısı
ws.Range("E2").Value = Application.WorksheetFunction.Subtotal(103, ws.Range("A2:A11"))
' Sayfada satır gizleyen bir filtre var mı?
ws.Range("F2").Value = ws.FilterMode
End Sub
' Filtre oklarını koruyarak gizli satırları geri getirir
Sub FiltreyiTemizle()
Dim ws As Worksheet
Set ws = ActiveSheet
If ws.FilterMode Then ws.ShowAllData
End Sub
AutoFilter
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Ürün | Kategori | Stok | Depo | Görünen Satır | Filtre Açık mı |
| 2 | Tükenmez Kalem | Kırtasiye | 450 | Ankara | 6 | DOĞRU |
| 3 | Defter A4 | Kırtasiye | 320 | İzmir | ||
| 4 | Dosya Klasörü | Ofis | 150 | Bursa | ||
| 5 | Zımba | Ofis | 80 | Ankara | ||
| 6 | Kağıt A4 | Kırtasiye | 900 | İstanbul | ||
| 7 | Bant | Ofis | 210 | Bursa | ||
| 8 | Silgi | Kırtasiye | 600 | İzmir | ||
| 9 | Makas | Ofis | 95 | İstanbul | ||
| 10 | Kalem Kutusu | Kırtasiye | 140 | Ankara | ||
| 11 | Post-it | Ofis | 380 | Bursa |
Depo StokExcelDepo v1.0.0
Kullanırken dikkat edin
- Field sütun harfi değil, sıra numarasıdır: Field değeri, filtrelediğiniz aralığın ilk sütununa göre sayılır. Aralık C1:F100 ise F sütunu için Field:=4 yazmanız gerekir. Sütun eklenip silindiğinde numaralar kayabilir; başlık adından numara bulmak için Application.Match kullanabilirsiniz.
- Aralığı açıkça belirtin: Tek hücreye uygulanan AutoFilter, çevresindeki bitişik bölgeyi kullanır. Sonuç yazdığınız ek sütunlar bitişik alana girip aralığı değiştirebilir. Bu nedenle örneklerdeki gibi filtre aralığını (A1:D11) açıkça yazmak daha güvenlidir.
- ShowAllData hatası: Filtre uygulanmamışken ShowAllData çağırmak çalışma zamanı hatası verir. Önce FilterMode değerinin True olduğunu denetleyin. Filtre oklarını da kaldırmak istiyorsanız AutoFilterMode = False kullanın.
- Veri değişince filtre kendiliğinden yenilenmez: Filtre uygulandıktan sonra hücre değerlerini değiştirirseniz satırlar otomatik olarak yeniden süzülmez. Etkin filtreyi yeniden uygulamak için ws.AutoFilter.ApplyFilter yöntemini kullanabilirsiniz.
- Tarih ve ondalık sayı ölçütleri: Ölçüt dizgeleri bölgesel ayarlardan etkilenebilir. Tarih ve ondalık sayı ölçütlerinde sonucu mutlaka deneyerek doğrulayın; tarihlerde seri değer kullanmak, xlFilterValues dizilerinde ise tarihleri Excel'in beklediği biçimde vermek gerekir.
- Korumalı sayfalar ve tablolar: Korumalı sayfada filtre kullanabilmek için Protect yönteminde AllowFiltering:=True verilmiş olmalıdır. Tablolarda (ListObject) filtre, tablonun kendi AutoFilter nesnesi üzerinden yönetilir; tablo ve normal aralık aynı sayfada birlikte filtrelenebilir.
- Görünen satırlarla çalışma: Filtre sonucu satırlar yalnızca gizlenir, silinmez. Toplam ve sayım için gizli satırları yok sayan Subtotal işlevini, kopyalama için SpecialCells(xlCellTypeVisible) kullanın. Görünen aralık yoksa SpecialCells hata verir; bunu On Error ile karşılayın.
- İlgili konular: