Dinamik Dizi Fonksiyonları

Dinamik Dizilerde VE ve YADA ile Süper Filtreleme, Excel’de Veri Yönetimini Yeniden Tanımlayın

Yayınlanma Tarihi: 22 November 2025

Dinamik Dizilerde VE ve YADA ile Süper Filtreleme, Excel’de Veri Yönetimini Yeniden Tanımlayın

 

Selam!

 

Özellikle büyük veri tablolarında, örneğin "hem belirli bir bölgeye ait olsun hem de satış miktarı belli bir sınırı aşsın" gibi birden fazla ve karmaşık filtreleme koşulunu uygulamak, geleneksel Otomatik Filtre ile mümkün olsa da tamamen manuel müdahale gerektiriyor. Gelişmiş Filtre ise kriter aralıklarının hazırlanması ve yönetilmesi açısından epey uğraştırıcı olabiliyor. İşte tam da bu noktada Excel’in Dinamik Dizi fonksiyonları devreye giriyor; veri filtreleme süreçlerini değiştirerek çok daha pratik ve etkili bir yöntem sunuyor.

 

Bu yazıda, Office 365 ile hayatımıza giren ve Excel’i resmen bir Veri Analiz Merkezi’ne dönüştüren Dinamik Dizi fonksiyonlarını, VE ve YADA mantıksal operatörleriyle nasıl birleştirerek süper filtreleme teknikleri geliştirebileceğini adım adım göreceksin. Amaç: Verinin orijinal yapısını bozmadan, tamamen formül odaklı, anlık güncellenen filtreleme mekanizmalarını kurmak.

 

Haydi başlayalım.

 

FİLTRE Fonksiyonunun Gücü

Dinamik Diziler, formül sonuçlarının tek bir hücrede kalmak yerine, çevredeki boş hücrelere otomatik olarak yayılma, yani Taşma Alanı (Spill Range) yeteneğine sahip olması demek. Hani son zamanlarda Excel’de sıklıkla karşımıza çıkan, #TAŞMA (#SPIL) hatası var ya, bunun sebebi aynı zamanda. Artık CTRL+SHIFT+ENTER (dizi formülü girişi) ile uğraşmana gerek kalmadı.

 

FİLTRE Fonksiyonu Dinamik Dizi Çağının Başlangıcı (Aşağı Yukarı)

Excel'de Dinamik Dizi fonksiyonlarının öncüsü olarak FİLTRE fonksiyonu gösterilebilir. Office 365 ile gelen ve dinamik dizi mantığını ilk kez gündeme taşıyan bu fonksiyon, karmaşık filtreleme işlemlerini yalnızca bir formülle ve anında, otomatik güncellenen sonuçlarla gerçekleştirmesine imkân tanıdı. FİLTRE fonksiyonu sayesinde, klasik yöntemlerin aksine, verinin orijinal yapısını bozmadan (ki bence süper olan bu) çok daha esnek, hızlı ve fonksiyonel filtreleme yapılabiliyor.  

Yani FİLTRE fonksiyonu yeni dönemin yıldızı. Ve formülün yapısı şöyle:

=FİLTRE(dizi; dahil_et; [boş_ise])

  • dizi: Filtre uygulamak istediğin tüm veri aralığı.
  • dahil_et: Filtreleme koşulunu belirlediğin, DOĞRU ya da YANLIŞ (yani 1 veya 0) değerlerinden oluşan mantıksal dizi. Bilhassa bu kısım, tüm sihrin gerçekleştiği yer.
  • [boş_ise]: Eğer filtre sonucunda hiçbir veri bulunamazsa ne gösterileceğini belirlediğin isteğe bağlı argüman (EĞERHATA (IFERROR) gibi yani).

 

 SIRALA ile Anında Sıralama

Filtrelenmiş veriyi anında sıralamak için formülünü sadece SIRALA fonksiyonunun içine alman yeterli.

Örnek:

=SIRALA(FİLTRE(VeriTablosu; VeriTablosu[Bölge]="Doğu"); 3; -1)

Burada,  Doğu Bölgesi satışlarını filtreledikten sonra, 3. sütuna (örneğin Satış Miktarı) göre büyükten küçüğe (-1 ile) sıralayabilirsin. Manuel sıralama ihtiyacını tamamen ortadan kaldırmış oluyorsun.

 

Filtrede VE ve YADA ile Çoklu Kriter

 FİLTRE fonksiyonunda, geleneksel VE ve YADA fonksiyonlarını değil, onların matematiksel karşılıklarını kullanıyoruz:

 

VE Mantığı için Çarpma Operatörü (*)

Birden fazla koşulun hepsinin doğru olmasını istiyorsan, koşullarını parantez içinde çarpma operatörüyle (*) birleştirirsin.

 

Mantık

Koşul 1

Koşul 2

DOĞRU (1)

DOĞRU (1)

1

YANLIŞ (0)

DOĞRU (1)

0

DOĞRU (1)

YANLIŞ (0)

0

YANLIŞ (0)

YANLIŞ (0)

0

 

Gördüğün gibi, sonuç sadece her iki koşul da 1 olduğunda 1 (DOĞRU) olur. VE mantığı böyle çalışıyor.

=FİLTRE(VeriTablosu[Bölge]="Batı") * (VeriTablosu[Kategori]="Elektronik")

Her bir koşulu mutlaka ayrı parantez içine alman gerekir, aksi takdirde matematiksel işlem önceliği bozulur ve Excel buna kızar!

 

YADA Mantığı için Toplama Operatörü (+)

Koşullardan en az birinin doğru olmasını istiyorsan, koşullarını parantez içinde toplama operatörüyle (+) birleştirirsin.

 

Mantık

Koşul 1

Koşul 2

DOĞRU (1)

DOĞRU (1)

2 ( > 0 )

YANLIŞ (0)

DOĞRU (1)

1 ( > 0 )

DOĞRU (1)

YANLIŞ (0)

1 ( > 0 )

YANLIŞ (0)

YANLIŞ (0)

0

 

Toplam 0'dan büyük olduğu sürece (yani en az bir koşul 1 ise), sonuç filtrelenir. Bu da YADA nın çalışma şekli.

=FİLTRE(VeriTablosu[Bölge]="Kuzey") + (VeriTablosu[Kategori]="Giyim")

 

VE ve YADA'yı Birleştir

Karmaşık iş mantıklarını modellemek için parantezleri iç içe kullanabilirsin.

 

Her Durumlu Filtre

"Bölgesi 'Batı' VE Kategori Adı 'Yüksek Marj' olan ürünler YADA (VEYA) Satış Miktarı 1000'den fazla olan satış temsilcisi 'Ayşe' olan kayıtları göster."

 

İşte formülü:

=FİLTRE( VeriTablosu;((VeriTablosu[Bölge]="Batı")*(VeriTablosu[Kategori]="Yüksek Marj"))+ ((VeriTablosu[Temsilci]="Ayşe")*(VeriTablosu[Miktar]>1000));"Kriterlere Uyan Veri Yok")

Gördüğün gibi, geleneksel yöntemlerle yapmak için VBA veya Power Query gerektirecek karmaşık senaryoları bile, Dinamik Dizilerle halledebiliyorsun. (Merak edenler için aşağıya, VBA kodlarını da ekliyorum)

 

Gelişmiş Filtreleme için Birkaç İpucu

Dinamik “Kısmi” Eşleşme (Metin Arama İçin Birebir)

Bir metin sütununda tam eşleşme yerine, o metni içeren tüm satırları filtrelemek istediğinde MBUL (SEARCH) fonksiyonunu ESAYIYSA (ISNUMBER) ile kullanabilirsin. Wildcard karakterleri (*, ?) ile uğraşmana gerek kalmaz!

Excel'de metin araması yaparken genellikle Wildcard yani joker karakterler (* ve ?) kullanılır. Örneğin, *Bedeli* ifadesi, içinde "Bedeli" geçen tüm metinleri bulmak için kullanılır. Ancak, yukarıda anlatılan ESAYIYSA (ISNUMBER) ve MBUL (SEARCH)  fonksiyonlarını birlikte kullandığında, bu joker karakterlere ihtiyaç duymadan, doğrudan aradığın kelimeyi içeren satırları filtreleyebilirsin. Yani, metnin tam olarak geçtiği konumu arayarak, daha hızlı ve pratik bir biçimde arama işlemini gerçekleştirebilirsin. Böylece hem formül yazımı kolaylaşır hem de hata yapma olasılığın azalır. Kısacası, klasik wildcard karakterlerine başvurmadan, daha dinamik ve kullanıcı dostu bir filtreleme elde edersiniz.

Hadi bir örnek ile açıklayalım, Fatura Açıklaması sütununda "Hizmet Bedeli" kelimesini içeren satırları bulmak için:

=FİLTRE(VeriTablosu; ESAYIYSA(MBUL("Hizmet Bedeli"; VeriTablosu[Fatura Açıklaması])); "Bulunamadı")

Burada ESAYIYSA fonksiyonunun gücünü kullanıyoruz: Eğer MBUL fonksiyonu aranan metni bulursa bir sayı (konum) döndürür, bulamazsa da hata (#YOK) der. ESAYIYSA ise sayı varsa DOĞRU (1), hata varsa YANLIŞ (0) döndürerek FİLTRE için mantıksal diziyi oluşturur.  Böylece eğer aranan ifade varsa filtreye dahil edilir.

 

Kriterlerin Bulunduğu Hücrelerini Dinamikleştirmek

Formül içindeki kriterleri ("Batı", "1000") elle yazmak yerine, ayrı hücrelere referans vererek, esnek ve kullanıcı dostu bir arayüz oluşturabilirsin.

Hücre

Açıklama

A1

Bölge Kriteri (örn: "Batı")

B1

Miktar Kriteri (örn: 1000)

 

=FİLTRE(VeriTablosu; (VeriTablosu[Bölge]=A1) * (VeriTablosu[Miktar]>B1); "Yok")

Bu sayede, kriter hücrelerindeki değerleri değiştirdiğin an, filtrelenmiş sonuçların da güncellenecek. Bak bunlara bir de Veri Doğrulama ile dinamik listeler oluşturursan, tadından yenmez.

Performans İçin Küçük Detaylar

Büyük veri setleriyle çalışırken:

  • A:Z yerine yalnızca verinin bulunduğu aralığı (A1:Z1000) seçerek yeniden hesaplama süresini kısaltırsın. (Benim alışkanlığımda her zaman tüm sütunları seçmek ama ciddi vakit kaybettiriyor, aklında olsun)
  • Çoklu FİLTRE kullanmak yerine, ana FİLTRE çıktısını geçici bir veri kaynağı gibi kullanıp, üzerinde BENZERSİZ veya SIRALA gibi başka Dinamik Dizi fonksiyonlarını çalıştırmak daha optimize olabilir.

Dinamik Dizi formülleri ve mantıksal operatörlerin bu birleşimi, sana Excel'de daha önce yalnızca programlama dilleriyle mümkün olan bir esneklik sunuyor. Artık karmaşık raporlama ve analiz görevlerini, VBA makrolarına ihtiyaç duymadan halledebilirsin.

 

Aşağıda, Excel FİLTRE formülüne denk gelecek şekilde, VBA ile veri filtreleme işlemini gerçekleştiren bir örnek kod bulabilirsin. Bu kod, "VeriTablosu" adlı bir tabloyu satır satır kontrol ederek, belirtilen kriterlere uyan satırları yeni bir sayfaya veya tabloya yazacak.

Sub Coklu_Filtre()

    Dim sayfa As Worksheet

  Set sayfa = ThisWorkbook.Sheets("Veri")

    

    ' Öncelikle mevcut filtreleri temizliyoruz

    sayfa.AutoFilterMode = False

' Başlık satırının 1. satır olduğunu varsaydık

With sayfa.Range("A1:D1")

        ' Bölge sütunu (A) = Batı, İçin

      sayfa.Range("A1:D1").AutoFilter Field:=1, Criteria1:="Batı"

    ' Kategori sütunu (B) = Yüksek Marj, için

      sayfa.Range("A1:D1").AutoFilter Field:=2, Criteria1:="Yüksek Marj"

    ' Temsilci sütunu (C) = Ayşe, için

      sayfa.Range("A1:D1").AutoFilter Field:=3, Criteria1:="Ayşe"

      ' Miktar sütunu (D) > 1000, için

      sayfa.Range("A1:D1").AutoFilter Field:=4, Criteria1:=">1000"

    End With

End Sub

 

 İlgilinizi Çekebilecek Diğer İçerikler:

 

0 Yorum

Bu yazıya henüz yorum yapılmamış.

Yorum Yap