Özellik ikonu

AutoFilter

İndirme izni yok

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.

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:
VBA
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ı.
Bağımsız değişkensiz çağrı (Aralık.AutoFilter) filtre oklarını açıp kapatır; yani elle yaptığınız Filtre düğmesi gibi çalışır.
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
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.

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.
Aynı aralıkta farklı alanlar için art arda AutoFilter çağırırsanız ölçütler birbirine VE ile eklenir; aynı alanı yeniden çağırırsanız o alanın önceki ölçütü değişir. Filtrelenmiş görünür hücrelere SpecialCells(xlCellTypeVisible) ile ulaşabilirsiniz.

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.
ABCDE
1ŞehirÜrünAdetTutarSonuç
2İzmirKlavye123.600,004
3AnkaraFare252.500,00
4İstanbulMonitör824.000,00
5İzmirFare151.500,00
6BursaKlavye103.000,00
7AnkaraMonitör515.000,00
8İzmirMonitör618.000,00
9İstanbulKlavye206.000,00
10BursaFare303.000,00
11İzmirKlavye92.700,00
Satış ListesiExcelDepo v1.0.0
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.

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.
ABCDE
1PersonelBölümAySatışSonuç
2Ayşe YılmazPerakendeOcak8.500,0034.800,00
3Mehmet DemirKurumsalOcak32.000,00
4Fatma KayaPerakendeŞubat4.200,00
5Ali ÇelikKurumsalŞubat15.000,00
6Zeynep ArslanPerakendeMart19.500,00
7Can ÖztürkKurumsalMart5.000,00
8Elif ŞahinPerakendeNisan21.000,00
9Burak AydınKurumsalNisan12.000,00
10Selin KoçPerakendeMayıs6.800,00
11Murat PolatKurumsalMayıs3.900,00
Personel SatışıExcelDepo v1.0.0
İ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.

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.
ABCDEF
1ÜrünKategoriStokDepoGörünen SatırFiltre Açık mı
2Tükenmez KalemKırtasiye450Ankara6DOĞRU
3Defter A4Kırtasiye320İzmir
4Dosya KlasörüOfis150Bursa
5ZımbaOfis80Ankara
6Kağıt A4Kırtasiye900İstanbul
7BantOfis210Bursa
8SilgiKırtasiye600İzmir
9MakasOfis95İstanbul
10Kalem KutusuKırtasiye140Ankara
11Post-itOfis380Bursa
Depo StokExcelDepo v1.0.0
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.

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:
    • Worksheet.AutoFilterMode, FilterMode, ShowAllData ve AutoFilter nesnesi
    • Range.SpecialCells ve xlCellTypeVisible
    • Range.AdvancedFilter (Gelişmiş Filtre)
    • ListObject (Tablo) ve Range.Sort
    • Worksheet.Protect ve AllowFiltering
    • ALTTOPLAM, FİLTRE, TOPLA ve EĞERSAY işlevleri
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
10
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst