S

Çözüldü Formüldeki Hücre Aralığını Otomatik Olarak Bulma

  • Konuyu başlatan Konuyu başlatan selamt
  • Başlangıç tarihi Başlangıç tarihi

selamt

Yıllık Site Üyesi
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Merhaba forum yöneticileri ve sakinleri,

Belki sizler için basittir ama benim için zor olan ve hayatımı kolaylaştıracak bir konuda yardımınıza ihtiyaç duymaktayım. Şöyle ki; Excel'de herhangi bir formülde genel olarak örneğin A:A ya da A1:A10 gibi hücre aralıklarını kullanırız.

Ben genelde A:A olanı tercih ediyorum ama bazı formüller sonuçları listeleme esnasında yavaşlık göstermektedir. A1:A10 örneğinde kullanınca da, A11 hücresine yazılmış bir değer arama alanının dışında kaldığı için, olası hatalı sonuçlara olanak vermektedir. Benim tam burada yapmak istediğim ise, A1:A10 kısmındaki 10 satır numarasını son dolu satırın numarası olacak şekilde belirlemek.

Örneğin en çok kullanılan fonksiyon olan DÜŞEYARA için örnekleme yapılabilir. Sorum genel nitelikte olduğu için bir dosya eklemedim, sanırım çokta gerekli olmayacaktır. Bana =DÜŞEARA(B2;A1:A10;2;0) formülünde A10 kısmının 10 rakamını nasıl otomatik bulurum hususunda destek olur musunuz?

Teşekkürlerimle.
 
Merhaba forum yöneticileri ve sakinleri,

Belki sizler için basittir ama benim için zor olan ve hayatımı kolaylaştıracak bir konuda yardımınıza ihtiyaç duymaktayım. Şöyle ki; Excel'de herhangi bir formülde genel olarak örneğin A:A ya da A1:A10 gibi hücre aralıklarını kullanırız.

Ben genelde A:A olanı tercih ediyorum ama bazı formüller sonuçları listeleme esnasında yavaşlık göstermektedir. A1:A10 örneğinde kullanınca da, A11 hücresine yazılmış bir değer arama alanının dışında kaldığı için, olası hatalı sonuçlara olanak vermektedir. Benim tam burada yapmak istediğim ise, A1:A10 kısmındaki 10 satır numarasını son dolu satırın numarası olacak şekilde belirlemek.

Örneğin en çok kullanılan fonksiyon olan DÜŞEYARA için örnekleme yapılabilir. Sorum genel nitelikte olduğu için bir dosya eklemedim, sanırım çokta gerekli olmayacaktır. Bana =DÜŞEARA(B2;A1:A10;2;0) formülünde A10 kısmının 10 rakamını nasıl otomatik bulurum hususunda destek olur musunuz?

Teşekkürlerimle.

Merhaba,
Öncelikle belirtmek isterim (sanırım öylesine bir formül yazdığınız için dikkat etmediniz) tek sütun seçip 2. sütunda aratma yapmışsınız. Ve arattığınız veri de 2. sütunda.

Deneyiniz;
Kod:
Görüntülemek için giriş yapmanız gerekmektedir.
(1 satır)
 

Ekli dosyalar

  • Xd.xlsx
    Xd.xlsx
    9.7 KB · Görüntüleme: 2
Merhaba @PriveT aynen dediğiniz gibi formülü ezberden yazarken 1 yerine 2 olmuş.
Çok teşekkür ederim cevabınız için, işimi gördü.
Bunu not edeyim de, sonraki her çalışmamda kullanayım artık.

İyi çalışmalar,
 
Selamlar,
Bilgi amaçlı olarak, Dinamik Alan ile ilgili, örnek üzerinden (belki biraz fazla uzun olacak ama) açıklama eklemek isterim.

Dosya ektedir...
Resimde de görüleceği üzere, açıklamayı dosyaya da yazdım.
Örnek olarak, günlük tarih bazında satış elemanlarının yapmış oldukları satış adetleri listesi ele alındı.
İstenilen, açılır listeden isim seçildiğinde seçilen personele ait kayıtların listelenmesi...

1646512749516.webp


Burada,
hem B - C - D kolonlarını içeren liste önemli ve hem de personel isimlerinin olduğu C kolonu önemli.
Personel ismine göre listeleme yapılacağından, C kolonuna göre işlemler yapıp dinamik alanlar belirlenmeli...
** C kolonunda BOŞ hücre - SAYI - METİN ifadeler mevcut.

Not : Gerek Açılır liste referans listesi ve gerekse kayıtların listelenmesi ve gerekse de Açılır liste Excel 365 formülleri ile yapıldı.

Dinamik Alan : Başlangıç hücresinden, son DOLU satırdaki hücreye kadarki alan olarak tanımlanabilir.
Avantajları
--- Formüllerde kullanıldığında gereksiz hücre (fazladan hesaplanan hücre aralığı) aralıkları hesaplanmaya dahil edilmez ve performanslı hesaplama sağlanır.
--- SATIR ekleme ve çıkarmalarda (Başlangıç hücresinin bulunduğu SATIR HARİÇ olmak üzere) dinamik alan otomatik olarak hesaplanır. Formüllerde kullanılan Hücre aralıkları değiştirilmek zorundayken, dinamik alanlarda değişikliğe gerek kalmaz.

Dinamik Alan için Ad Tanımlamaları yapılmalı... Ad Tanımlamaları için Bak. Formüller >>> Ad Yöneticisi

1 - Son DOLU hücreye göre Liste SATIR adedi hesaplanmalı...
Bunun için çeşitli formüller mevcut. Örneğin,

=ARA(2;1/(Sayfa1!$C$7:$C$2000<>"");SATIR(Sayfa1!$C$7:$C$2000))-SATIR(Sayfa1!$C$7)+1

Excel 365 için
=ARA(2;1/(Sayfa1!$C$7:$C$2000<>"");SIRALI(SATIRSAY(Sayfa1!$C$7:$C$2000)))

ya da
=KAÇINCI(2;1/(Sayfa1!$C$7:$C$2000<>""))

ya da
=MAK(EĞER(Sayfa1!$C$7:$C$2000<>"";SIRALI(SATIRSAY(Sayfa1!$C$7:$C$2000))))

MAK(EĞER ile KAÇINCI formülleri DİZİ formüllerdir. ARA ise standart Normal formüldür (ama DİZİ formül mantığında çalışır)
Fazla miktarda SATIR içeren listelerde kullanılması yavaşlamalara neden olabilir. Yine de, belirtmekte fayda var, bu formüllerde de C : C gibi komple sütunu değerlendirmemek gerekir.

Ben genelde, eklenen dosyada olduğu gibi
=MAK(EĞERHATA(KAÇINCI(9^99;Sayfa1!$C$7:$C$1000000);1);EĞERHATA(KAÇINCI("zzzzz";Sayfa1!$C$7:$C$1000000);1))
formülünü tercih ediyorum...
*** Standart Normal formüldür. Değerlendirme aralığı olarak C : C gibi komple alan yazılabilir. Ya da örnekte olduğu gibi 1.000.000 satıra kadar rahatlıkla değerlendirilebilir.

Burada
KAÇINCI(9^99;Sayfa1!$C$7:$C$1000000) : formülüyle Sayfa1!$C$7:$C$1000000 aralığında SAYI olanların en sonuncusunun (9^99 ile en sonuncusuna bakılıyor) kaçıncı olduğu bulunmakta... EĞER listede SAYI Yok ise HATA verecektir. O nedenle de EĞERHATA ile 1 hesaplanır.
KAÇINCI("zzzzz";Sayfa1!$C$7:$C$1000000) : formülüyle Sayfa1!$C$7:$C$1000000 aralığında METİN olanların en sonuncusunun (zzzzz ile en sonuncusuna bakılıyor) kaçıncı olduğu bulunmakta... EĞER listede METİN Yok ise HATA verecektir. O nedenle de EĞERHATA ile 1 hesaplanır.
Ve her ikisinin Maksimumu hesaplanarak Liste SATIR adedi hesaplanır.

Burada dikkat edilecek noktalar :
a - Liste her zaman 1. satırdan başlamaz. Örnekte olduğu gibi 7. satırdan itibaren kayıtlar başlamakta.
(Genelde, A1 : A10000 gibi aralıkla hesaplama yapılır ve Satır Numarası bulunur)
b - Formüllerle bulunacak değer, Satır Numarası değildir. Listedeki Satır Adedidir.
(Çünkü bu değeri direkt olarak kullanıp Dinamik Alan oluşturacağız)

Örnek dosyada bu son DOLU Satıra göre Liste SATIR adedi n ad tanımlamasıyla yapıldı.

2 - Dinamik Alan bu n ad tanımlamasıyla beraber yapılabilir artık.
Örnek dosyada Alan ad tanımlamasıyla yapıldı.
=KAYDIR(Sayfa1!$B$7;;;n;3)

Başlangıç hücresi : Sayfa!$B$7
SATIR adedi : n
Sütun Adedi : 3
Bu durumda dinamik alanı bulacaksak
n = 16 (B7 den itibaren son dolu hücre olan B22 hücresine kadar 16 adet SATIR ve 3 adet KOLON)

Dinamik Alan = Alan =Sayfa1!$C$7:$E$22
olacaktır.
Aynı zamanda Satış elemanları kolonu değerlendirilecek kolon olduğundan ikinci bir Dinamik Alan olarak Pers ad tanımlaması yapıldı.
=KAYDIR(Sayfa1!$C$7;;;n;1)

Başlangıç hücresi : Sayfa!$C$7
SATIR adedi : n
Sütun Adedi : 1
Bu durumda dinamik alanı bulacaksak
n = 16 (C7 den itibaren son dolu hücre olan C22 hücresine kadar 16 adet SATIR ve 1 adet KOLON)

Dinamik Alan = Pers =Sayfa1!$C$7:$C$22
olacaktır.
*** Listeye satır ekleme / çıkarmalarda, n ile bulunan liste SATIR adedi otomatik olarak değişecek ve Dinamik alanlar da otomatik olarak hesaplanacaktır.

Dinamik alanlar için
KAYDIR işlevini örnek olarak verdim.. İNDİS işlevi ile de yapılabilir...
Dosyada bu İNDİS tanımlamaları da yaptım ve de formüllerde bu tanımlamaları kullandım.

AlanA =Sayfa1!$B$7:İNDİS(Sayfa1!$D$7:$D$1000000;n)
PersA =Sayfa1!$C$7:İNDİS(Sayfa1!$C$7:$C$1000000;n)


İNDİS işlevinin avantajı, KAYDIR işlevi gibi Volatile (Oynak, uçucu) olmayışıdır. Yani, volatile demek, herhangi bir hücrede değişiklik yapıldığında , veri girildiğinde, veri silindiğinde... vs sayfa yeni baştan hesaplanacaktır. demektir. Bu da performans kaybıdır. Ancak yine de kullanıcının seçimidir...

Not :
Formüller >>> Ad Yöneticisinde ad tanımlaması yapmak...
1 - Ad Yöneticisinde Yeni tıklayın
2 - Tanımlanacak Ad yazın (Bunun için bazı kurallar mevcut)
3 - Başvuru yerine Formülü yazın. (Burada dikkat edilecek nokta, Hücre Adreslerinin önünde MUTLAKA Sayfa isimleri bulunmalıdır. Dikkat edilirse, formüllerde, $C$7:$C$1000000 yerine daima Sayfa1!$C$7:$C$1000000 şeklinde yazdım)

Formüller >>> Ad Yöneticisine gelindiğinde tüm tanımlanmış adlar listelenir.
Resimde de görüleceği üzere, bu adlardan herhangi bir Dinamik Alan seçtiğinizde ve Başvuru yeri yazan kısımdaki formüle mouse ile tıkladığınızda, sayfadaki tanımlanmış alan kesik çizgilerle belirtilerek gösterilecektir.

1646513825780.webp



ve bu dinamik alan tanımlamalarını formüllerde kullandık.

** Açılır liste Referans Listesi için L6 hücresinde

=SIRALA(BENZERSİZ(FİLTRE(PersA ; (PersA<>""))))

** Veri Doğrulama Açılır Liste için Formül çubuğuna

=$L$6#

** Seçilen Personele ait kayıtlar için H6 hücresine

=SIRALA(FİLTRE( AlanA ; (I2<>"")*( PersA =I2);""))
 

Ekli dosyalar

Moderatörün son düzenlenenleri:
Üst