Ado İle Kapalı Dosyadan Tarih Aralığına Göre Toplam Alma

asi_kral

Özel Üye
Katılım
22 Şubat 2012
Mesajlar
2,833
Excel Vers. ve Dili
Excel 2007 Türkçe
Selamun Aleyküm Arkadaşlar
Araştırdım ama tam istediğim çözümü bulamadım ( yada yorumlayamadım ).
Kapalı olan dosyam hiç açılmadan belli bir vade aralığındaki toplam rakamları elde etmek istiyorum.
İstediğim haftalık ve aylık olarak belli bir hücreden tarihi alarak vadesi dolan rakamları elde etmek.
Kapalı dosyada bulunan vade sütunundaki tarihlere göre verilen sütununda bulunan rakamları toplayarak belli bir hücreye yazmak.
Kapalı olan dosya açık olan dosyanın alt klasöründedir ve birden fazla dosya vardır.
İlginize teşekkür ederim.
Örnek dosyalar ektedir.
 

Ekli dosyalar

asi_kral

Özel Üye
Katılım
22 Şubat 2012
Mesajlar
2,833
Excel Vers. ve Dili
Excel 2007 Türkçe
Hocam cevap için teşekkür ederim.
Adodb konusunda gerçekten hiç anlamadım.
İstediğim ise
Kapalı dosya bir cari dosyası. F sütunu vadeleri gösteren sütun.
Benim istediğim ise Açık B1 hücresinde yazan tarih ve öncesinde ne kadar dolan tutar var onu bulmak.
Aynı işlemi C1 için de yapacağım.
Kodların neye işlerlik kazandığını bir türlü anlamadım.
İşime yarayacak kodu da bulamıyorum dolayısı ile.
Teşekkür ederim.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,719
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
ADO konusu veritabanı biçimindeki tablolar için uygundur. Sütunlarda sabit veri türlerinin olması sorgularda büyük avantaj sağlar. Sizin verilerinizde aynı sütunda farklı veri türleri (TARİH-METİN) bulunuyor. Bu sebeple sorgularda genel sıkıntılar yaşamanız kaçınılmazdır.

ADO'da amaç mümkün mertebe tek sorgu satırı ile blok olarak çözüme ulaşmaktır. Bu şekilde sonuç oldukça hızlı şekilde oluşacaktır. Fakat sizin dosyanızdaki yapı buna uygun olmadığı için verileri döngüye alarak işlem yapmak gerekiyor.

Aşağıdaki kod bu işlemi yapmaktadır.

C++:
Option Explicit

Sub Get_Data_Ado()
    Dim conn As Object
    Dim rs As Object
    Dim strConn As String
    Dim kapaliDosya As String
    Dim sorgu As String
    Dim tarih1 As Date, tarih2 As Date
    Dim toplam1 As Double, toplam2 As Double
    Dim ws As Worksheet
    Dim fDeger As Variant
    Dim cDeger As Variant
    Dim dDeger As Variant

    Set ws = ThisWorkbook.Sheets("Sayfa1")

    kapaliDosya = ThisWorkbook.Path & "\Kapalı.xlsm"

    tarih1 = ws.Range("B1").Value
    tarih2 = ws.Range("C1").Value

    Set conn = CreateObject("ADODB.Connection")
    strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
              "Data Source=" & kapaliDosya & ";" & _
              "Extended Properties=""Excel 12.0;HDR=No;IMEX=1"";"
    
    conn.Open strConn

    sorgu = "Select F6, F4, F3 From [Sayfa1$] Where F6 <> 'Kapalı'"

    Set rs = conn.Execute(sorgu)

    toplam1 = 0
    toplam2 = 0

    Do While Not rs.EOF
        fDeger = rs.Fields("F6").Value
        cDeger = rs.Fields("F3").Value
        dDeger = rs.Fields("F4").Value

        If Not IsNull(fDeger) And IsDate(fDeger) Then
            If CDate(fDeger) <= tarih1 Then toplam1 = toplam1 + (dDeger - cDeger)
            If CDate(fDeger) <= tarih2 Then toplam2 = toplam2 + (dDeger - cDeger)
        End If

        rs.MoveNext
    Loop

    ws.Range("B3").Value = toplam1
    ws.Range("C3").Value = toplam2

    rs.Close
    conn.Close
    
    Set rs = Nothing
    Set conn = Nothing

    MsgBox "Veriler güncellenmiştir."
End Sub
 

asi_kral

Özel Üye
Katılım
22 Şubat 2012
Mesajlar
2,833
Excel Vers. ve Dili
Excel 2007 Türkçe
Korhan Hocam çok teşekkür ederim.
1 - Kodu açıklama ihtimaliniz var mı?
2 - Kod tüm satırları döngüye alıyor sanıyorum. Bu çok büyük dosyalarda sıkıntı çıkarmaz mı?
kolay gelsin.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,719
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Rica ederim...

ADO kullanmak istiyorsanız veritabanı kurallarına maksimum seviyede uymanız gerekir. Bu size kodlamada çok büyük avantaj sağlar. Yoksa böyle dolambaçlı olarak tabir edeceğimiz yöntemlere başvurmak zorunda kalırsınız.

Kod öncelikle tanımlamalarla başlıyor.
Sonrasında kapalı dosyaya bağlantı prosedürü ile devam ediyor.
Verileriniz ado sorgusuna göre düzensiz olduğu için SORGU ile F sütunundaki KAPALI kriterine eşit olmayan tüm veriyi kayıt setine yüklüyoruz.
Sonra bunları döngüye alarak TARİH olan hücreleri tarih1 ve tarih2 parametrelerine göre sorgulayıp toplamları alarak işleme devam ediliyor.
Kayıt seti bitene kadara bu işlem devam ediyor.
Son aşamada elde edilen toplamlar ilgili hücrelere aktarılıyor.

Sanırım bu açıklama sizin için yeterli olacaktır.
 
Üst