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

Çözüldü VBA ADO ve SQL ile Kapalı Excel Dosyalarından Veri Çekme

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.
Durum
Konu Çözümlendiği İçin Kapatılmıştır.

sertac87

Yeni Üye
Katılım
3 Eyl 2026
Mesajlar
5
Aldığı beğeni
2
Excel V
Office 2024 TR
Konu Sahibi
Windows 10 Google Chrome 152
Selamlar herkese, forumda yeniyim. Şirkette bir ana havuz dosyam var. Her gün farklı departmanlardan gelen 15-20 adet kapalı Excel dosyasındaki verileri bu ana dosyada birleştirmek (konsolide etmek) zorundayım.Şu an klasik Workbooks.Open yöntemiyle dosyaları tek tek arka planda açıp, veriyi kopyalayıp kapatan bir makro döngüsü kullanıyorum. Fakat dosyaların her biri yaklaşık 50'şer bin satır olduğu için makronun çalışması bazen 4-5 dakika sürüyor, işlem esnasında Excel tamamen kilitleniyor ve yanıt vermiyor moduna düşüyor.Dosyaları hiç açmadan, arka planda ADO ve SQL (Select * From...) bağlantısı kurarak bu verileri ana dosyama saniyeler içinde çekmenin bir yolu var mıdır? Kod yapısını bir türlü oturtamadım, bağlantı (Connection string) sürekli hata veriyor. Örnek taslak dosyamı ekliyorum, VBA mimarisinde uzman hocalarımızın desteğini bekliyorum.
Şimdiden çok teşekkürler.
 
Çözüm
Merhaba.

İşinizin görülmesine sevindim. Asıl verilerinizle de denersiniz.

Ben dosya yolunu daha önce başka benzer bir soruya verdiğim cevapta olduğu gibi C:\Aylık_Raporlar\ olarak belirledim. Siz kendi dosyalarınız neredeyse ona göre değişiklik yapabilirsiniz. Kullandığım Kaynak veri Dosyasını da ekliyorum. Sayfa isimlerini değiştirirseniz kodlarda da gerekli değişiklikleri yapmayı unutmayın.

Esenlikler dilerim. İyi çalışmalar.
Android 10 Google Chrome 152
Merhaba,

Link faydalı olacaktır...

 
Konu Sahibi
Android 10 Google Chrome 152
Selamlar hocalarım,
Korhan AYHAN hocam link için teşekkürler, inceledim fakat VBA ve ADO bağlantı (Connection string) konularında çok yeni olduğum için oradaki kodları kendi örnek dosyama tam olarak entegre etmeyi beceremedim, sürekli hata alıyorum.
İlk mesajda eklediğim vba_ado_kapali_dosya_taslak.xlsx dosyam üzerinden doğrudan revize yapıp, çalışan kod bloğunu paylaşabilecek uzman hocalarımızın değerli çözümlerini bekliyorum. Şimdiden vakit ayıran herkese teşekkürler
 
Windows 10 Google Chrome 152
Selamlar herkese, forumda yeniyim. Şirkette bir ana havuz dosyam var. Her gün farklı departmanlardan gelen 15-20 adet kapalı Excel dosyasındaki verileri bu ana dosyada birleştirmek (konsolide etmek) zorundayım.Şu an klasik Workbooks.Open yöntemiyle dosyaları tek tek arka planda açıp, veriyi kopyalayıp kapatan bir makro döngüsü kullanıyorum. Fakat dosyaların her biri yaklaşık 50'şer bin satır olduğu için makronun çalışması bazen 4-5 dakika sürüyor, işlem esnasında Excel tamamen kilitleniyor ve yanıt vermiyor moduna düşüyor.Dosyaları hiç açmadan, arka planda ADO ve SQL (Select * From...) bağlantısı kurarak bu verileri ana dosyama saniyeler içinde çekmenin bir yolu var mıdır? Kod yapısını bir türlü oturtamadım, bağlantı (Connection string) sürekli hata veriyor. Örnek taslak dosyamı ekliyorum, VBA mimarisinde uzman hocalarımızın desteğini bekliyorum.
Şimdiden çok teşekkürler.

Merhaba.

Doğru yönlendirmek adın birkaç sorum olacak.
1-) He dosyada ellişerbin satır var demişsiniz. Bu dosyalar her gün farklı verilerle mi hazırlanıyor yoksa, aynı dosyaya ilaveler yapılarak mı ilerliyor.
2-) Bu dosyalardaki veriler manuel mi giriliyor yoksa hali hazırda kullanılan bir program varda oradan döküm alınarak mı hazırlanıyor.

İlk sorumun cevabına göre şöyle bir kurgu kurulabilir, aktarılan verinin tekrar aktarılmaması değerlendirile bilir, böylelikle aynı veriler sürekli aktarılmaktansa önceden aktarılanlar yerine yeni eklenenler aktarılır böylelikle işlem süresi kısalabilir.

Hali hazırda bir programdan döküm alınıyorsa zaten veriler bir veri tabanında var demektir, oradan direk çekilebilir.

Excel dosyaları, önce SQL gibi bir veri tabanına aktarılır, orada eğer analiz yada gruplama gibi işlemler yapılacaksa, veri tabanı üzerinde Her zaman hazır tablo halinde bulunan bir view tablo kurgulanır ve bu tablo direk excele aktarılır yine süreç kısalabilir.

Büyük datalarda çözüm yolu çok, önce mevcut durumu işlem tekrarlarını önlemek için iyi değerlendirmek gerekir.

Şunu da unutmamak gerekir, " Alet işler el övünür." Bilgisayarın gücüne ve işlem anındaki durumuna göre süreler değişecektir. Çoğu hızlı çalışan kodlar Ram da geçicide olsa bir alan kapladığı için çok büyük datalarda illaki bir yavaşlama olacaktır, bu nedenle donanım da önemli.

Geri dönüşünüze göre çözümler üretebiliriz.
İyi çalışmalar.
 
Konu Sahibi
Windows 10 Google Chrome 152
KarıncaZ hocam detaylı analizinize ve yaklaşımınıza hayran kaldım, çok teşekkür ederim. Sorularınızı şu şekilde yanıtlayayım:
1-) Bu dosyalar her gün tamamen sıfırdan ve farklı verilerle hazırlanıyor (Günün güncel operasyon dataları). Dolayısıyla kümülatif bir ekleme mantığı yerine, o klasördeki dosyaların tamamının her gün sıfırdan ana havuza çekilmesi gerekiyor.
2-) Veriler şirket içinde kullanılan lokal bir yazılımdan maalesef ham Excel / CSV dökümü olarak alınıyor. Doğrudan ana veri tabanına (SQL Server vb.) erişim yetkimiz bilgi işlem departmanı tarafından güvenlik gerekçesiyle kısıtlandığı için mecburen bu kapalı Excel dosyaları üzerinden yürümek zorundayız.
Bilgisayar donanımımız (RAM ve İşlemci) fena sayılmaz ancak Workbooks.Open ile 15-20 dosyayı tek tek görsel olarak aç-kapat yapmak ciddi zaman alıyor. Sizin de belirttiğiniz gibi veriyi işlerken RAM'i minimumda tutacak, arka planda kapalı dosyalara ADO Connection kurup sadece hedef alanları Recordset üzerinden CopyFromRecordset ile ana sayfaya basacak temel bir ADO döngü koduna ihtiyacım var.
Bu döngü mimarisini ilk paylaştığım örnek dosya üzerinden ayağa kaldırabilirsek, büyük bir yükten kurtulmuş olacağım. Değerli destekleriniz için çok teşekkür ederim.
 
Windows 10 Google Chrome 152
Merhaba.

Dosyanızda çalışırken şöyle durum oluştur. Ben kendimce 4 Sütun ve Başlık satırı dahil 74.770 satırdan oluşan 20 dosya oluşturdum.
Hepsini aktarınca Excel sayfasının satır sayını aşıyor ve bazı veriler aktarılamıyordu. Bu nedenle bazı kısıtlamalara ve sayfa dolunca ek sayfa açmaya karar verdim.

Böyle bir durumda siz ne yapılmasını istiyorsunuz. Benim yaptığım yöntemle sonuçlar ekteki gibi. Yani Tüm dosyalar okunuyor, sayfa dolunca yeni bir sayfa açıp oraya yazmaya devam ediyor. Yukardaki belirttiğim özelliklerdeki tüm dosyaların aktarımı 12,31 saniye sürüyor.

Cevabınıza göre dosyayı toparlayıp gönderirim.

Ayrıca " Veriler şirket içinde kullanılan lokal bir yazılımdan maalesef ham Excel / CSV dökümü olarak alınıyor. " yazmışsınız. Yazılımcı ile görüşürseniz sizin istediğiniz tabloyu yada analizi yaparak hazır bir veri sunabilir size.

İyi çalışmalar.
 
Konu Sahibi
Windows 10 Google Chrome 152
KarıncaZ hocam inanılmazsınız, tek kelimeyle muazzam bir çalışma olmuş!
Üşenmeyip arka planda 20 dosya ve milyonlarca satırla test etmeniz, üstelik 1.5 milyona yakın datayı sadece 12 saniyede kayıpsız çekebilmeniz ADO mimarisinin gücünü ve sizin uzmanlığınızı tam anlamıyla kanıtlıyor.
Satır sınırını aştığında otomatik olarak yeni sayfa açıp (Sayfa2, Sayfa3 gibi) yazmaya devam etmesi kurgusu tek kelimeyle kusursuz. Bizim tam olarak ihtiyaç duyduğumuz ve işimizi garantiye alacak senaryo kesinlikle budur hocam. Başka hiçbir kısıtlamaya gerek yok, bu hali fazlasıyla işimizi görüyor.
Paylaştığınız ekran görüntüsündeki hız ve başarı oranına hayran kaldım. Eğer sizin için de uygunsa, toparladığınız bu çözüm dosyasını ve kod bloklarını paylaşabilirseniz çok mutlu olurum.

Emekleriniz, foruma ve bana ayırdığınız kıymetli vaktiniz için çok teşekkür ederim. Eksik olmayın
 
Windows 10 Google Chrome 152
Merhaba.

İşinizin görülmesine sevindim. Asıl verilerinizle de denersiniz.

Ben dosya yolunu daha önce başka benzer bir soruya verdiğim cevapta olduğu gibi C:\Aylık_Raporlar\ olarak belirledim. Siz kendi dosyalarınız neredeyse ona göre değişiklik yapabilirsiniz. Kullandığım Kaynak veri Dosyasını da ekliyorum. Sayfa isimlerini değiştirirseniz kodlarda da gerekli değişiklikleri yapmayı unutmayın.

Esenlikler dilerim. İyi çalışmalar.
 
Çözüm
Konu Sahibi
Windows 10 Google Chrome 152
KarıncaZ hocam, hem kodlar hem de eklediğiniz örnek kaynak veri dosyası için çok teşekkür ederim.
Dosyayı hemen bilgisayarıma indirdim. Belirttiğiniz C:\Aylık_Raporlar\ klasör yolunu kendi şirket ağımızdaki klasör yoluyla değiştirdim ve gerçek datalarımızla ilk denemeyi yaptım. Sonuç gerçekten inanılmaz! Bizim dakikalarca beklediğimiz, Excel'i kilitleyen o devasa veri aktarımı saniyeler içinde sıfır hata ile tamamlandı.
Sayfa limitini aşınca otomatik olarak yeni sayfaya geçme kurgusu da tam istediğim gibi kusursuz çalışıyor. Beni ve departmanımızı her gün tekrarlanan çok büyük bir iş yükünden kurtardınız.
Emeğinize, bilginize ve foruma kattığınız bu muazzam değere sağlık hocam.
Çok teşekkürler, iyi çalışmalar dilerim
 
Windows 10 Google Chrome 152
Merhaba,

Bende alternatif olarak paylaştığım linkteki yöntemleri sizin veri dosyanıza göre uyarladım...

25 Adet dosyada toplam 1.250.000 satırlık veride deneme süreleri aşağıdaki gibi oluştu...

ADO YÖNTEMİ6,5 / 8,5Saniye
INDEX YÖNTEMİ14 / 15Saniye

İçeriği görebilmek için Giriş yap ya da Üye ol.

İçeriği görebilmek için Giriş yap ya da Üye ol.
 
Durum
Konu Çözümlendiği İçin Kapatılmıştır.
Geri
Üst