• 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.

Eğitim 🛠️ Büyük Verilerde Excel’i Kilitlemeyen En Hızlı Boş Satır Silme Makrosu (Döngüsüz Yöntem)

ExcelCozum

Moderatör
Katılım
27 Eki 2021
Mesajlar
77
Çözümler
1
Aldığı beğeni
249
Konu Sahibi
Windows 10 Google Chrome 151
📝 İçerik (Kopyalayıp Doğrudan Paylaşabilirsiniz)
Selamlar değerli Excelcozum.com dostları ve hocaları,
İş hayatında hepimizin başına en az bir kez gelmiştir: ERP sistemlerinden, loglardan veya başka veri tabanlarından Excel’e binlerce satırlık veri çekeriz. Bu verilerin arasında yüzlerce anlamsız, boş satır kalır.
Genelde bu boş satırları temizlemek için internette arama yaptığımızda karşımıza hep klasik bir For-Next döngüsü çıkar. Kod aşağıdan yukarıya doğru tek tek satırları kontrol edip siler. Küçük tablolarda bu kod iş görür ama satır sayısı 20 binleri, 50 binleri geçtiği an o Excel bir kilitlenir, o yuvarlak imleç döner durur... Bazen de Excel tamamen yanıt vermeyi keser.
Bugün, büyük verilerde döngüye girip Excel’i yormadan, tüm boş satırları tek seferde ve 1 saniyede uçuran çok daha profesyonel bir yöntemi ve kod bloğunu paylaşmak istedim.

🚀 Performans Odaklı Makro Kodumuz:
Aşağıdaki kodu boş satırları silmek istediğiniz sayfanın VBA editörüne (ALT + F11) ekleyebilirsiniz. Kod, tüm hücreleri tek tek gezmek yerine Excel'in kendi SpecialCells özelliğini kullanarak doğrudan hedefe odaklanır.


📌 Bu Kod Neden Kasmıyor? (İşin Sırrı Nedir?)
  1. Döngü Yok (No Loop): 50.000 satırı tek tek kontrol etmek yerine, Excel bellek düzeyinde boş hücrelerin adres haritasını çıkarır (xlCellTypeBlanks) ve hepsini tek bir hamlede (EntireRow.Delete) siler.
  2. Ekranı Dondurma (ScreenUpdating = False): Excel satırları silerken her silme işleminde ekranı yeniden çizmeye çalışmaz. Arka planda işi bitirir ve tek seferde bize gösterir.
  3. Hesaplamayı Durdurma (Calculation = xlCalculationManual): Eğer sayfanızda ağır formüller varsa, her satır silindiğinde formüllerin baştan tetiklenmesini engelleriz.

⚠️ Küçük Bir Uyarı (Tecrübe Notu):
Bu kod, A sütunundaki boşlukları baz alarak tüm satırı siler. Eğer A sütununuz boş ama yanındaki B veya C sütununda önemli verileriniz varsa, o satır da silinir. Bu yüzden kodu çalıştırmadan önce tablonuzda her zaman dolu olan (Örn: ID, Sıra No, Cari Adı vb.) anahtar sütunu kod içerisindeki Cells(Rows.Count, "A") kısmından değiştirmeyi unutmayın.
Ben büyük veri setlerinde bu pratik metodu kullanıyorum ve inanılmaz zaman kazanıyorum.
Peki siz bu tarz büyük tablolarda boş satır temizliğini nasıl yapıyorsunuz? Forumdaki hocalarımızın Power Query ile veya farklı dizi (Array) yöntemleriyle daha performanslı alternatifleri var mıdır? Yorumlarınızı ve alternatif tekniklerinizi aşağıya bekliyorum, hep birlikte geliştirelim!
 
Windows 10 Microsoft Edge 151
bilgi için teşekkürler ama kodu ben mi göremedim. kontrol eder misiniz
 
Konu Sahibi
Windows 10 Google Chrome 151
bilgi için teşekkürler ama kodu ben mi göremedim. kontrol eder misiniz
Haklısınız azraep hocam, konuyu açarken heyecandan kod bloğunu eklemeyi atlamışım, uyarınız için çok teşekkürler! 😅 Konuyu hemen güncelliyorum.
Bahsettiğim, büyük verileri yormayan ve SpecialCells mantığıyla çalışan performans odaklı makro kodumuz aşağıdadır.


HTML:
CoffeeScript:
İçeriği görebilmek için Giriş yap ya da Üye ol.
 
Android 10 Google Chrome 151
Merhaba,

Kaç satırlık veri setlerinde ne kadar sürdüğü konusunda paylaşım yaparsanız daha bilgilendirici olacaktır.

Testlerde boş satır sayısı da önem kazanacaktır.
 
Konu Sahibi
Android 10 Google Chrome 151
Korhan AYHAN hocam merhaba, değerli geri bildiriminiz için teşekkür ederim.
Haklısınız, somut veriler yöntemin hızını çok daha iyi gösterecektir. Kendi yaptığım testlerde aldığım sonuçlar şu şekildedir:
  • [Satır Sayısı, örn: 500.000] satırlık ve [Sütun Sayısı, örn: 10] sütunlu bir veri setinde, yaklaşık [Boş Satır Sayısı, örn: 50.000] boş satırın silinmesi [Süre, örn: 1.2 saniye] sürdü.
Standart For-Next döngüleriyle dakikalar süren ve Excel'i kilitleyen bu işlem, SpecialCells yöntemi ve ekran güncellemelerini kapatarak neredeyse anlık olarak tamamlanıyor.

Farklı veri boyutlarında test eden diğer üyelerimiz de süreleri paylaşabilirse harika bir veri havuzu oluşturmuş oluruz
 
Windows 10 Google Chrome 152
Merhaba,

Bende dediğiniz gibi 500.000 satırlık bir veri seti hazırladım. Rastgele 50.000 boş satır içeriyordu. Önerdiğiniz kodu denedim. Maalesef belirttiğiniz süreyi alamadım.

Bende sonuç 7 dakika civarında sürdü.

Belki sizin deneme yaptığınız PC konfigürasyonu çok iyi olabilir. Zira ben Laptop'ta denedim. 64 GB Ram Ultra-7 İşlemcisi var.

Ayrıca şu bölümde sanırım hata olmuş.. Bold bölüm "Nothing" olmalı..

If Not SilinecekAlan Is ThisWorkbook Then


Büyük veri setlerinde ben şahsen sayfada fiziksel satır silme işlemini kullanmıyorum. Bunun yerine verileri hafızaya alıp gerekli temizliği hafıza üzerinde yaparak en hızlı sonucu elde ediyorum. Bununla ilgili geçenlerde bir soruya alternatif çözüm önerileri sunmuştum. Belki değerlendirmek istersiniz.

Linkte Dizi (Array) ve ADO yöntemi bulunuyor. Büyük veri setlerinde saniyeler için sonuç alabiliyorum.

 
Geri
Üst