E

Soru Excel Kasılması Yoğun Fonksiyon

ERMAN.SAYINALP

Normal Üye
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Merhaba,
Yaptığım bir çalışmada, çok içerikli bir veri sayfasından veri çekerek diğer sayfalarda "şarta bağlı sorgulama" tabloları oluşturdum.

EĞERHATA(EĞER(SATIR()-9>MAK(SATSAY03);"";İNDİS(KAYTAM;KAÇINCI(SATIR()-9;SATSAY03;0);KAÇINCI(C$8;KAYSAT;0)));"")
.
.
.
EĞERHATA(EĞER(SATIR()-9>MAK(SATSAY03);"";İNDİS(KAYTAM;KAÇINCI(SATIR()-9;SATSAY03;0);KAÇINCI(I$8;KAYSAT;0)));"")
Fonksiyonunu;

6 SUTUN'da ( C + D +E + F + H + I ) ve 1000 SATIR'da ( C10 + I1000 ) kulllandığım 4 Sayfa var (şimdilik). 1-2 Sayfa daha açabilecek durumdayım. Ancak şimdiden, EXCEL adeta "kağnı"ya döndü. Müthiş derecede kasıldı.

Sorum;

* Söz konusu EXCEL'deki kasılma, nasıl kaldırılabilir ?
* Yanıtınız, FONKSİYON yerine MAKRO KODU yazımı olur ise, bu VBA KODLAMASI hakkında yardımcı olabilir misiniz ?

Örnek göndermiyorum, sizden örneğin Sayfa1, Sayfa2, Sayfa3 için C10:I1000 aralığına yukarıdaki formulün kullanıldığı VBA Kodlaması rica ediyorum.

Saygılarımla.
 
@ERMAN SAYINALP
93 satırlık veri için neden 20.000 satırlık alanı kontrol ediyorsunuz?
Bu tür durumlar için DİNAMİK AD TANIMLAMALARI kullanmalısınız.
Yani veri eklendikçe son veri satırını algılayan AD TANIMLAMALARI.

Mesela kaydefQ adıyla birinci, kaydefCM adıyla ikinci formülü kullanarak birer AD TANIMLAMASI yapın.
Sonra da mevcut formüllerdeki;
-- KAYDEF!$Q$11:$Q$20000 yerine kaydefQ,
-- KAYDEF!$C$11:$M$20000 yerine de kaydefCM
yazın, sonra da formülleri aşağı doğru kopyalayın.
Böylece 20.000 satırlık alan yerine 93 satırlık gerçek veri alanını kontrol etmiş olursunuz.
Veri kaynağına yeni veri eklendiğinde de de bu ad tanımlamaları,
yapılan veri eklemesini algılayacak ve her zaman doğru ve sadece gerekli alanı kontrol etmiş olacaktır.

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

Hatta formüllerin tümünde KAÇINCI(SATIR()-9;kaydefQ;0) kullanmak yerine,
bu formülü CAREXT sayfasında A sütununa uygulayıp, diğer formüllerde bu alana atıf yapmanız da hızı fark ettirecektir.
Çünkü ilgili sıra numarasının kaçıncı satırda olduğu her formülde tekrar ve tekrar hesaplanmak yerine,
her satırda sadece 1 kez hesaplanmış olur.
Ayrıca; zaman içerisinde sütun başlıklarının konumlarını değiştirmeyecekseniz,
İNDİS formülündeki sütun indis sayısının hesaplandığı KAÇINCI(C$8;KAYDEF!$C$10:$M$10;0) formülü yerine
doğrudan elle ilgili sütun numarasını yazmak da hızı olumlu yönde etkileyecektir.

.
 
@ERMAN SAYINALP
93 satırlık veri için neden 20.000 satırlık alanı kontrol ediyorsunuz?
Bu tür durumlar için DİNAMİK AD TANIMLAMALARI kullanmalısınız.
Yani veri eklendikçe son veri satırını algılayan AD TANIMLAMALARI.

Mesela kaydefQ adıyla birinci, kaydefCM adıyla ikinci formülü kullanarak birer AD TANIMLAMASI yapın.
Sonra da mevcut formüllerdeki;
-- KAYDEF!$Q$11:$Q$20000 yerine kaydefQ,
-- KAYDEF!$C$11:$M$20000 yerine de kaydefCM
yazın, sonra da formülleri aşağı doğru kopyalayın.
Böylece 20.000 satırlık alan yerine 93 satırlık gerçek veri alanını kontrol etmiş olursunuz.
Veri kaynağına yeni veri eklendiğinde de de bu ad tanımlamaları,
yapılan veri eklemesini algılayacak ve her zaman doğru ve sadece gerekli alanı kontrol etmiş olacaktır.

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

Hatta formüllerin tümünde KAÇINCI(SATIR()-9;kaydefQ;0) kullanmak yerine,
bu formülü CAREXT sayfasında A sütununa uygulayıp, diğer formüllerde bu alana atıf yapmanız da hızı fark ettirecektir.
Çünkü ilgili sıra numarasının kaçıncı satırda olduğu her formülde tekrar ve tekrar hesaplanmak yerine,
her satırda sadece 1 kez hesaplanmış olur.
Ayrıca; zaman içerisinde sütun başlıklarının konumlarını değiştirmeyecekseniz,
İNDİS formülündeki sütun indis sayısının hesaplandığı KAÇINCI(C$8;KAYDEF!$C$10:$M$10;0) formülü yerine
doğrudan elle ilgili sütun numarasını yazmak da hızı olumlu yönde etkileyecektir.

.
 
Anlamışsınızdır ancak yine de belirteyim, birinci ve ikinci formüllerin yerlerini değiştirmeliydim.
İkinci formül Q sütununa yönelik, birinci formül ise tüm veri alanına yönelik.
 
@ERMAN SAYINALP
93 satırlık veri için neden 20.000 satırlık alanı kontrol ediyorsunuz?
Bu tür durumlar için DİNAMİK AD TANIMLAMALARI kullanmalısınız.
Yani veri eklendikçe son veri satırını algılayan AD TANIMLAMALARI.

Mesela kaydefQ adıyla birinci, kaydefCM adıyla ikinci formülü kullanarak birer AD TANIMLAMASI yapın.
Sonra da mevcut formüllerdeki;
-- KAYDEF!$Q$11:$Q$20000 yerine kaydefQ,
-- KAYDEF!$C$11:$M$20000 yerine de kaydefCM
yazın, sonra da formülleri aşağı doğru kopyalayın.
Böylece 20.000 satırlık alan yerine 93 satırlık gerçek veri alanını kontrol etmiş olursunuz.
Veri kaynağına yeni veri eklendiğinde de de bu ad tanımlamaları,
yapılan veri eklemesini algılayacak ve her zaman doğru ve sadece gerekli alanı kontrol etmiş olacaktır.

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

Hatta formüllerin tümünde KAÇINCI(SATIR()-9;kaydefQ;0) kullanmak yerine,
bu formülü CAREXT sayfasında A sütununa uygulayıp, diğer formüllerde bu alana atıf yapmanız da hızı fark ettirecektir.
Çünkü ilgili sıra numarasının kaçıncı satırda olduğu her formülde tekrar ve tekrar hesaplanmak yerine,
her satırda sadece 1 kez hesaplanmış olur.
Ayrıca; zaman içerisinde sütun başlıklarının konumlarını değiştirmeyecekseniz,
İNDİS formülündeki sütun indis sayısının hesaplandığı KAÇINCI(C$8;KAYDEF!$C$10:$M$10;0) formülü yerine
doğrudan elle ilgili sütun numarasını yazmak da hızı olumlu yönde etkileyecektir.

.
Değerli Baran,

Tavsiyelerinize teşekkür ederim.

1- Veri Sayfası, 93 satır değil 17859 satır veri içeriyor. Örnek dosya istediniz diye, örnek olması için hepsini birebir paylaşmadım.
2- Soru sayfamda da göreceğiniz üzere,
EĞERHATA(EĞER(SATIR()-9>MAK(SATSAY03);"";İNDİS(KAYTAM;KAÇINCI(SATIR()-9;SATSAY03;0);KAÇINCI(C$8;KAYSAT;0)));"")
SATSAY03 = Ad Tanımlama (20000 satırlık)
KAYTAM = Ad Tanımlama (20000 satırlık)
KAYSAT = Ad Tanımlama (20000 satırlık)
Ad Tanımlama yapılmış 40 adetin üstünde tanımlama var.

Soruma yanıt olacak bir yardımınız olursa faydalanmak isterim.

Selamlar.
 
Şu belge üzerine gerçek verilerinizi yapıştırıp bir deneyin bakalım.

Gerçi büyük veri yığınlarında ÖZET TABLO veya MAKRO kullanmak en iyisidir ama
formülle çözüm için bence en hızlı sonuç alınacak yöntem böyle.
A8 hücresi formülün kaç satırda sonuç üreteceğini gösterir (kontrol işine de yarar),
gerekirse A sütununu ve 7'ncu satırı gizleyebilir, yazı rengini zemin rengiyle aynı yapıp içeriklerin görünmesini engelleyebilirsiniz vs,
bu tür şeyler keyfe kalmış mevzular neticede.
 

Ekli dosyalar

Şu belge üzerine gerçek verilerinizi yapıştırıp bir deneyin bakalım.

Gerçi büyük veri yığınlarında ÖZET TABLO veya MAKRO kullanmak en iyisidir ama
formülle çözüm için bence en hızlı sonuç alınacak yöntem böyle.
A8 hücresi formülün kaç satırda sonuç üreteceğini gösterir (kontrol işine de yarar),
gerekirse A sütununu ve 7'ncu satırı gizleyebilir, yazı rengini zemin rengiyle aynı yapıp içeriklerin görünmesini engelleyebilirsiniz vs,
bu tür şeyler keyfe kalmış mevzular neticede.
Üzerinde çalışıp, sonuçları hakkında geri dönüş yaparım. 🙋‍♂️
 
Maalesef öyle bir alanımız yok.

Özel dosya/özel çalışmalar için tek alan ÜCRETLİ DESTEK alanı.
ÜCRETLİ DESTEK alanında, örnek belgeler/yazışmalar sadece forum yönetim ekibi ve konu sahibi tarafından görülebilir.

MAKRO kullanma tercihi yapılacaksa (20.000 satır gibi bir veri alanından söz ediliyorsa makro çözümü kaçınılmaz bence)
bir çok çözüm yöntemi kullanılabilir. Örneğin işlem sadece veri alanında bir sütunda, sonuç sayfasındaki bir kelimeyle
tam eşleşme/içerir/ile başlar/ile biter gibi bir kriter varsa basitçe filtre yöntemi kullanılabilir.
 
Maalesef öyle bir alanımız yok.

Özel dosya/özel çalışmalar için tek alan ÜCRETLİ DESTEK alanı.
ÜCRETLİ DESTEK alanında, örnek belgeler/yazışmalar sadece forum yönetim ekibi ve konu sahibi tarafından görülebilir.

MAKRO kullanma tercihi yapılacaksa (20.000 satır gibi bir veri alanından söz ediliyorsa makro çözümü kaçınılmaz bence)
bir çok çözüm yöntemi kullanılabilir. Örneğin işlem sadece veri alanında bir sütunda, sonuç sayfasındaki bir kelimeyle
tam eşleşme/içerir/ile başlar/ile biter gibi bir kriter varsa basitçe filtre yöntemi kullanılabilir.
Kasılmayı yaratan söz konusu (örneğini sizinle paylaştığım bir tanesi) sorgulama sayfaları. Bu sayfalar birbirine benzer yakınlıkta ve şimdilik 4 adet. Belki 1-2 tane daha yapabilirim. İsteğime ürettiğiniz çözüm alternatifinizden de yola çıkarak bir Makro Kodlama yazarsanız, ben onu diğer sayfalarım için revize edebilirim. Ne dersiniz. ?
 
Öyle genelgeçer bir makro kodlaması mümkün olmayabilir.
Ne bileyim; bir yerde İÇERİR kriteri diğerinde TAM EŞLEŞME kriteri,
birinde şu sütun şuraya, diğerinde o sütun buraya gibi birçok unsur olabilir.
 
Üst