Çözüldü Kapalı Sayfalardan Belirtilen Koşulla Göre Veri Aktarmak.

gicimi

Altın Üye
Katılım
3 Şubat 2008
Mesajlar
594
Excel Vers. ve Dili
Office 2016 Eng. 64 Bit
Altın Üyelik Bitiş Tarihi
21-11-2024
@Haluk Bey #19 mesajınızdan önceki durumu Ömer Bey’in tam anlattığı gibi...
SDM ve ADM verileri aslında aynı anda iki exceldede yer almıyor.
Seri no örneğin 49 olan bir sütunun verisi sadece bir dosyanın içerisinde yer alıyor. Onu önceki mesajlarda belirtmeyi unuttum affınıza sınıyorum.
 

gicimi

Altın Üye
Katılım
3 Şubat 2008
Mesajlar
594
Excel Vers. ve Dili
Office 2016 Eng. 64 Bit
Altın Üyelik Bitiş Tarihi
21-11-2024
@gicimi;

Soruyu tam olarak anlayamadım.....

1) Report dosyasındaki sayfada D sütununda yer alan Seri No'lar sabit, onlara dokunmuyoruz değil mi?

2) Report dosyasındaki sayfada E-J sütunlarındaki veriyi sadece Data dosyasındaki sayfanın I-N sütunlarından olduğu gibi alıyoruz, bu verileri alırken ADM ve SDM dosyalarıyla bir işimiz yok değil mi?

3) Data dosyasından alınacak veriler 65.536 adet satırdan fazla değil, doğru mu?

4) 1 No'lu mesajınızda belirttiğiniz sorunuzun diğer kısmıyla ilgili şu anda bir fikrim yok, çünkü anlamadım. Örneğin; Report dosyasındaki sayfada 20 No'lu seri numarasına karşılık gelen değer SDM dosyasında "Önemsiz" olarak, ADM dosyasında ise yine "Önemsiz" olarak belirtilmiş. Eğer bunlardan biri "Önemsiz" diğeri "Önemli" olsaydı, Report dosyasındaki K sütununa bu verilerden hangisini, hangi kritere göre değerlendirerek alacağız?

Her neyse, 4. maddeyi şimdilik bir kenara bırakalım......... Yukarıdaki 3 soruya da cevabınız "Evet" ise, aşağıdaki kod daha hızlı olarak verileri alacaktır diye tahmin ediyorum.

Kod:
Sub Test()
    'Haluk
    '26/09/2018
 
    Dim myFile As String
    Dim daoDBEngine As Object
    Dim DB As Object
    Dim RS As Object
    Dim dbRow As Long
 
    On Error Resume Next
        Set daoDBEngine = CreateObject("DAO.DBEngine")
        Set daoDBEngine = CreateObject("DAO.DBEngine.36")
        Set daoDBEngine = CreateObject("DAO.DBEngine.120")
    On Error GoTo 0
 
    myFile = ThisWorkbook.Path & Application.PathSeparator & "Data.xlsx"
 
    Range("E2:J" & Rows.Count) = ""
 
    Set DB = daoDBEngine.OpenDatabase(myFile, False, False, "Excel 8.0; HDR=No; IMEX=1;")
    Set RS = DB.OpenRecordset("Select * from [Sayfa1$I2:N65536]")
 
    With RS
        .MoveLast
         dbRow = .RecordCount
        .MoveFirst
    End With

    Range("E2").CopyFromRecordset RS
 
    MsgBox "İşlem tamam..... (Haluk)"
 
    RS.Close
    DB.Close
 
    Range("G2:G65536").NumberFormat = "hh:mm:ss"
    Set RS = Nothing
    Set DB = Nothing
    Set daoDBEngine = Nothing
End Sub
.
@Haluk Bey rahatsız ediyorum.

1) Report dosyasındaki sayfada D sütununda yer alan Seri No'lar sabit.
2) Report dosyasındaki sayfada E-O sütunlarındaki veriyi sadece Data dosyasındaki sayfanın I-J-K-L-M-N sütunlarından olduğu gibi alıyoruz,
3) Data dosyasından alınacak veriler 100.000 - 150.000 adet satır bulunmaktadır.
4) Report dosyasındaki seri numarasına karşılık gelen değer SDM dosyasında (D) sütunundaki numarayı arayıp Report sayfasının (L) sütunun değerini getirmesini,
5) Report dosyasındaki seri numarasına karşılık gelen değer ADM dosyasında (D) sütunundaki numarayı arayıp Report sayfasının (L) sütunun değerini getirmesini,

Güncel_Hali
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,310
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Bence SQL (Union, subquery ... ) kullanarak yapılabilir muhtemelen ama çok hakim değilim.

@Zeki Gürsoy size yardımcı olabilir...

.
 

gicimi

Altın Üye
Katılım
3 Şubat 2008
Mesajlar
594
Excel Vers. ve Dili
Office 2016 Eng. 64 Bit
Altın Üyelik Bitiş Tarihi
21-11-2024
@Zeki Gürsoy Bey #22 mesajdaki bilgi ve örnek veriye istinaden konu hakkında yardımcı olabilir misiniz.
 
Son düzenleme:

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,269
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Merhaba. Konuyu anladığım kadarıyla "Report" isimli dosyaya diğer dosyalardaki veriler toplanacak ve anahtar sütunumuz da "Seri No".
Konuyu teknik olarak (benim görmek istediğim şekliyle) tekrar yazmanızmümkün mü?

Report-E = Data-I
Report-F = Data-J
.
.

Not: Excel dosyalarında büyük veri kümeleriyle çalışmak, gerçek anlamda veritabanı kadar performans vermeyebilir.
 

gicimi

Altın Üye
Katılım
3 Şubat 2008
Mesajlar
594
Excel Vers. ve Dili
Office 2016 Eng. 64 Bit
Altın Üyelik Bitiş Tarihi
21-11-2024
@Zeki Gürsoy Doğrudur.

Report-E = Data-I
Report-F = Data-J
Report-G = Data-K
Report-H = Data-L
Report-I = Data-M
Report-J = Data-N
Report-K = Data-O

Buradaki teknik veriyi yazamadım:)

Report-L = ADM-H
Report-L = SDM-H

Kapalı sayfada ADM da anahtar kelime olan "Seri No" ara yapıp varsa Report Sayfasının (L) sütuna veriyi aktarması,
Kapalı sayfada SDM da anahtar kelime olan "Seri No" ara yapıp varsa Report Sayfasının (L) sütuna veriyi aktarması,
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,269
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Hem ADM, hem de SDM dosyasındaki H sütununun dolu gelme ihtimali var mı? Gelirse ne olacak?
 

gicimi

Altın Üye
Katılım
3 Şubat 2008
Mesajlar
594
Excel Vers. ve Dili
Office 2016 Eng. 64 Bit
Altın Üyelik Bitiş Tarihi
21-11-2024
@Zeki Gürsoy Bey gelme ihtimali yok. Öyle bir durum olur ise Seri No ya ait satırı renklendirebilir miyiz.
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,269
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
Maalesef Excel, SQL sorgularında 4-5 dk gibi uzun sürede sorgu tamamlıyor. Ancak Access' te istediğiniz sonuç 3-5 saniyede geliyor.
Access' e hızlıca aktarmak ta kolay ve hızlı ancak henüz program halinde getiremedim.
Senaryo şöyle :

- Söz konusu Excel dosyalarının hepsi kesinlikle kapalı olacak (aksi halde batch insert yavaş olur) ve komutlar VBScript veya harici bir Excel dosyası tarafından tarafından yapılacak,
- ADOX.Catalog ile yeni bir .accdb oluşturulacak,
- ADODB.Connection "Execute" ile "Select Into" batch insert yoluyla tablolar yapılacak,
- Kapalı olan Report.xlsm açılarak SQL çalışacak.

Bu adımlar başarılı bir şekilde tamamlandığında batch insert dahil toplam süre tahminimce 6-10 saniye kadar tutacaktır.

Yarın akşam görüşmek üzere...
 

Ziynettin

Destek Ekibi
Destek Ekibi
Katılım
18 Nisan 2008
Mesajlar
1,104
Excel Vers. ve Dili
office2010
Merhaba,
Bu şekilde deneyiniz.
İlk olarak "C" sürücüye "Veri" adında klasör oluşturun, Veri klasörün içine "Data", SDM", "AMD" dosyalarını ekleyiniz. Umarım doğru sonuc alınır ve bu kadar fazla veriyi ne kadar sürede aktarır bende merak ediyorum.
 

Ekli dosyalar

gicimi

Altın Üye
Katılım
3 Şubat 2008
Mesajlar
594
Excel Vers. ve Dili
Office 2016 Eng. 64 Bit
Altın Üyelik Bitiş Tarihi
21-11-2024
@Zeki Gürsoy dört gözle bekliyor olacağım. Çok teşekkür ederim.
 

gicimi

Altın Üye
Katılım
3 Şubat 2008
Mesajlar
594
Excel Vers. ve Dili
Office 2016 Eng. 64 Bit
Altın Üyelik Bitiş Tarihi
21-11-2024
@Ziynettin Merhaba;

Resimlerdeki gibi hata aldım.

1.JPG
2.JPG
 

Ziynettin

Destek Ekibi
Destek Ekibi
Katılım
18 Nisan 2008
Mesajlar
1,104
Excel Vers. ve Dili
office2010
Workbooks(dosya3).Close satırın altına
On Error Resume Next deyim satırını ekleyip deneyin.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,310
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
@gicimi ;

En son eklediğiniz ASM ve SDM dosyalarındaki Seri No'ları görünce aklıma takıldı, bu nedenle konuyu açıklığa kavuşturmak istedim.... belki Zeki Beyin de işine yarayabilir.

Sizin esas itibariyle amacınız Report dosyasındaki Seri No'ları ADM ve SDM dosyalarında olup olmadığını sorgulamak ve olanları ayıklayıp Report dosyasında listelemek mi yoksa bir kısmı ADM, bir kısmı SDM dosyasında olan Seri No'ları Report dosyasında birleştirmek ve buna Data dosyasındaki diğer verileri de ilave etmek mi? Eğer sizin istediğiniz ikincisi ise; Report dosyasındaki Seri No'ların olmasına da gerek yok, bunlar ADM ve SDM dosyalarından direkt alınacak demektir.

.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,310
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
@gicimi;

SQL'den fazla anlamadığım için ekli dosyada bir takım acemice kodlar yazdım, gerçi sizin istediklerinizi de tam olarak anlamamış olabilirim, zaten o yüzden yukarıdaki 34 No'lu mesajı yazdım. Bu nedenle, kendi anladığıma göre bir mantık geliştirdim. Ekli dosyayı, diğer dosyaların olduğu klasöre yerleştirip, çalıştırmayı deneyin.

Kodda CopyFromRecordset metodu kullanıldığı için 65536 satırdan fazla veriyle çalışılamaz. Kodun çalışma süresi ise Zeki Beyin belirttiği yöntemler kullanılmadığı için biraz vakit alır.

Bu arada, Zeki Beyin çalışmasını ben de merakla bekliyorum...

.
 

Ekli dosyalar

gicimi

Altın Üye
Katılım
3 Şubat 2008
Mesajlar
594
Excel Vers. ve Dili
Office 2016 Eng. 64 Bit
Altın Üyelik Bitiş Tarihi
21-11-2024
@Haluk Bey merhaba;

“Sizin esas itibariyle amacınız Report dosyasındaki Seri No'ları ADM ve SDM dosyalarında olup olmadığını sorgulamak ve olanları ayıklayıp Report dosyasında listelemek” ve buna Data dosyasındaki diğer verileri de ilave etmek.
 

gicimi

Altın Üye
Katılım
3 Şubat 2008
Mesajlar
594
Excel Vers. ve Dili
Office 2016 Eng. 64 Bit
Altın Üyelik Bitiş Tarihi
21-11-2024
Report sayfasındaki seri numalar hem ADM ve SDM sayfalarında da olmayabilir.
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,310
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
35 No'lu mesaja eklediğim dosyayı denediniz mi?

.
 

gicimi

Altın Üye
Katılım
3 Şubat 2008
Mesajlar
594
Excel Vers. ve Dili
Office 2016 Eng. 64 Bit
Altın Üyelik Bitiş Tarihi
21-11-2024
@Haluk;
PC başında değilim. Mobilim akşam kontrol edip dönüş sağlayacağım. Tekrar tekrar emeğinize sağlık
 

gicimi

Altın Üye
Katılım
3 Şubat 2008
Mesajlar
594
Excel Vers. ve Dili
Office 2016 Eng. 64 Bit
Altın Üyelik Bitiş Tarihi
21-11-2024
@Haluk Bey şimdi denedim resimlerdeki hatayı verdi.

Ekran Alıntısı.JPGEkran Alıntısı2.JPG
 
Üst