• DİKKAT !

    Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak Dosya Yükleme tamamen ücretsizdir.

Engin.Demir

Yeni Üye
Katılım
3 Eyl 2026
Mesajlar
6
Aldığı beğeni
1
Katkı
%3
Excel V
Office 2021 TR
Konu Sahibi
Selamlar herkese, iyi forumlar dilerim.
Şirkette veri analitiği departmanında çalışıyorum ve her ay yaklaşık 1.2 milyon satırlık ham satış datasıyla rapor hazırlamam gerekiyor. Yapmak istediğim şey şu: A sütununda Bölge, B sütununda Mağaza Tipi ve C sütununda Ürün ID var. Benim bu üç kritere göre "Benzersiz (Unique) satılan ürün sayısını" bulup rapor sayfasına yazdırmam lazım.
Klasik For-Next döngüleriyle iç içe kontrol yapmaya çalıştım ama Excel "Yanıt Vermiyor" moduna geçiyor, işlemci (CPU) %100 oluyor ve bilgisayar kilitleniyor. Büyük veride kasmayan bir çözüm ararken yabancı kaynaklarda Scripting.Dictionary ya da Collection yapısının çok daha hızlı (bellekte çalıştığı için) olduğunu okudum.
Kendi çapımda bir şeyler karalayıp Scripting.Dictionary ile tek kriterli benzersiz saydırmayı başardım ama işin içine 3 farklı kriter (Bölge + Mağaza Tipi + Ürün ID) girince mantığı bir türlü oturtamadım. Key (Anahtar) kısmına bu 3 kriteri birleştirip A2 & B2 & C2 şeklinde mi atamalıyım, yoksa iç içe (nested) dictionary mi kurmak gerekiyor? Hangisi RAM'i daha az şişirir ve daha performanslı olur?
Üstatlardan ricam, büyük datalarda saniyeler içinde sonuç verecek, dizilerle (Variant Array) optimize edilmiş ileri düzey bir VBA kod mimarisi konusunda bana yol gösterebilir misiniz?
Ekte, üzerinde çalıştığım yapının küçük bir simülasyonunu içeren örnek dosyayı paylaşıyorum. Yardımlarınız için şimdiden çok teşekkür ederim.
 

Ekli dosyalar

Excel 2021'de 1.200.000 satır olmaz, 1.048.576 satır vardır. Rapor sayfasında B2 hücresine, aşağıdaki formülü yapıştırıp, aşağı doğru kopyalayın.
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
 
Konu Sahibi
Alicimri hocam öncelikle çok teşekkür ederim, hızır gibi yetiştiniz. Haklısınız, Excel'in satır sınırını (1.048.576) kurumsal dilde ağız alışkanlığıyla 'milyon satır' diyerek yuvarlamışım, uyarınız için teşekkürler.
Verdiğiniz dinamik dizi formülü mantık olarak tam istediğim sonucu (benzersiz sayımı) üretiyor. Küçük datalarda test ettim, kusursuz çalıştı.
Ancak sayfadaki satır sayısı 1 milyon sınırına dayandığında, tüm sütunu (Ham_Data!A:A ve Ham_Data!B:B) formülle taratıp aşağı doğru kopyalayınca Excel yine ciddi şekilde kasmaya ve hesaplama yaparken donmaya başladı. Dosya her açıldığında veya bir hücre değiştiğinde formüller arkada tekrar çalıştığı için sayfayı hareket ettiremiyorum.
Bu yüzden hocalarım, bu işlemi formülle değil de sadece bir butona basınca arka planda hafızada (VBA ile) saniyeler içinde çözüp rapor sayfasına sadece 'değer' olarak basacak bir makro / Scripting.Dictionary kod mimarisine hala çok ihtiyacım var. Bu formül mantığını makro koduna nasıl dökebiliriz.
 
ADO ile yaptığım örnek aşağıda, deneyin
HTML:
Kod:
İçeriği görebilmek için Giriş yap ya da Üye ol.
 
Son düzenleme:
Selamlar herkese, iyi forumlar dilerim.
Şirkette veri analitiği departmanında çalışıyorum ve her ay yaklaşık 1.2 milyon satırlık ham satış datasıyla rapor hazırlamam gerekiyor. Yapmak istediğim şey şu: A sütununda Bölge, B sütununda Mağaza Tipi ve C sütununda Ürün ID var. Benim bu üç kritere göre "Benzersiz (Unique) satılan ürün sayısını" bulup rapor sayfasına yazdırmam lazım.
Klasik For-Next döngüleriyle iç içe kontrol yapmaya çalıştım ama Excel "Yanıt Vermiyor" moduna geçiyor, işlemci (CPU) %100 oluyor ve bilgisayar kilitleniyor. Büyük veride kasmayan bir çözüm ararken yabancı kaynaklarda Scripting.Dictionary ya da Collection yapısının çok daha hızlı (bellekte çalıştığı için) olduğunu okudum.
Kendi çapımda bir şeyler karalayıp Scripting.Dictionary ile tek kriterli benzersiz saydırmayı başardım ama işin içine 3 farklı kriter (Bölge + Mağaza Tipi + Ürün ID) girince mantığı bir türlü oturtamadım. Key (Anahtar) kısmına bu 3 kriteri birleştirip A2 & B2 & C2 şeklinde mi atamalıyım, yoksa iç içe (nested) dictionary mi kurmak gerekiyor? Hangisi RAM'i daha az şişirir ve daha performanslı olur?
Üstatlardan ricam, büyük datalarda saniyeler içinde sonuç verecek, dizilerle (Variant Array) optimize edilmiş ileri düzey bir VBA kod mimarisi konusunda bana yol gösterebilir misiniz?
Ekte, üzerinde çalıştığım yapının küçük bir simülasyonunu içeren örnek dosyayı paylaşıyorum. Yardımlarınız için şimdiden çok teşekkür ederim.
Deneyiniz
 

Ekli dosyalar

#4 mesajdaki kodlardaki SQL metninde değişiklik yaptım.
 
Merhaba,

Ham_Data sayfanızı TABLO olarak biçimlendirdim. Sonrasında Pivot oluşturdum. Dilimleyici ekleyerek filtre alanı oluşturdum. Bu şekilde verileri yönetmeniz daha kolay olacaktır.

Pivot Table'deki sürükle-bırak yöntemi ile dilediğiniz gibi raporu biçimlendirebilirsiniz. Bu esneklikte size avantaj sağlayacaktır.
 

Ekli dosyalar

Geri
Üst