• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Scripting.dictionary çalışma hatası

Haliy bey,

Kodunuzu denedim 12 Saniye civarında raporlama işlemini bitirdi. Bu konu büyük datalarla çalışan
arkadaşlarımıza bir yol gösterebilir.

İlginiz için teşekkür ederim.


Sayın; Kuvari

Kodunuzu denedim fakat Ado hakkında bilgim olmadığı için bir sonuç alamadım rica etsem küçük bir örnek dosya ile eklerseniz verileri çoğaltarak deneme yapabilirim.
 
Dosyaya sayfa sayısı ekledikçe kodlardaki zaman dilimi uzuyor.
Esasında sayfalarda bu kadar çok veri varsa excell kullanmamak lazım.

Çalışan bütün kodlara ait sayfaları da ekledim.
 

Ekli dosyalar

Özet tablo seçeneğini de atlamayalım. Tablo üzerinde sağ tuş "Yenile" dediğinizde 1 sn. bile almaz güncelleme.

.
 

Ekli dosyalar

Haliy bey,

Kodunuzu denedim 12 Saniye civarında raporlama işlemini bitirdi. Bu konu büyük datalarla çalışan
arkadaşlarımıza bir yol gösterebilir.

İlginiz için teşekkür ederim.


Sayın; Kuvari

Kodunuzu denedim fakat Ado hakkında bilgim olmadığı için bir sonuç alamadım rica etsem küçük bir örnek dosya ile eklerseniz verileri çoğaltarak deneme yapabilirim.

Vedat bey merhaba,

Kodu sizin ekledeğiniz dosya üzerinden yazdım. Halit bey'in eklediği dosyada var.
 
Kod ile yapıldığında en hızlı yöntem ADO'dur. Halit bey'in eklediği dosyada göreceğiniz ADO bir yöntemden 3 kat, diğerinden ise 4 kat hızlı çalışıyor.
 
Sayın Kuvari,

Sizin kodunuz ortalama birim fiyatı sanırım yanlış hesaplıyor. Düzeltirseniz daha faydalı olacaktır.

Halit Bey sizde kodunuza birim bölümünü ekleyebilir misiniz? Benim eklemiş olduğum dosyada BİRİM sütunuda var. Ona göre düzenlerseniz daha faydalı olacaktır.

Bende ayrıca ek olarak makro ile özet tablo performansını ekleyeceğim. (Hazırlıyorum...)

Ekleyeceğim dosyada tüm performansları görebilirsiniz.
 
22 nolu mesajdaki dosyadaki kodları düzeltmiştim.
 
Vedat Bey,

Özelden gönderdiğiniz mesaja istinaden aşağıdaki kodu kullanabilirsiniz.


Benim kısa bir mantık sorum olacaktı. Geçenlerde bir dosya yapmıştın Aylık Tüketimlerle alakalı burda mükerrersiz olarak almış olmuduğumuz liste yerine raporlama sayfasındaki listelemiş olduğumuz (A VE B ) sütunundaki verilere göre nasıl toplam aldırırız.

Açıkcası bu sorumun üzerinde 2 gündür uğraşıyom.


Kod:
Option Explicit

Sub Ozet_Tablo()
    Dim S1 As Worksheet, S2 As Worksheet, Son As Long, X As Long, Zaman As Double, Kriter As String, WF As WorksheetFunction
    
    On Error Resume Next
    
    Zaman = Timer
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    
    Set S1 = Sheets("veri tabanı")
    Set S2 = Sheets("detay rapor")
    Set WF = WorksheetFunction
    
    S2.Range("D4:O" & S2.Rows.Count).ClearContents
    S2.Range("A4:O" & S2.Rows.Count).Borders.LineStyle = 0
    
    Son = S1.Cells(S1.Rows.Count, 1).End(3).Row
    
    With S1.Range("AZ2:AZ" & Son)
        .Formula = "='" & S1.Name & "'!K2&" & """#""" & "&IF(AND('" & S1.Name & "'!M2>='" & S2.Name & "'!R$1,'" & S1.Name & "'!N2<='" & S2.Name & "'!R$2),1,0)"
        .Value = .Value
    End With
    
    For X = 4 To S2.Cells(S2.Rows.Count, 1).End(3).Row
        Kriter = S2.Cells(X, 2) & "#1"
        S2.Cells(X, 4) = WF.SumIf(S1.Columns("AZ"), Kriter, S1.Columns("P"))
        S2.Cells(X, 6) = WF.SumIf(S1.Columns("AZ"), Kriter, S1.Columns("O"))
        S2.Cells(X, 5) = S2.Cells(X, 6) / S2.Cells(X, 4)
        
        S2.Cells(X, 7) = WF.SumIf(S1.Columns("AZ"), Kriter, S1.Columns("Q")) - WF.SumIf(S1.Columns("AZ"), Kriter, S1.Columns("T"))
        S2.Cells(X, 9) = WF.SumIf(S1.Columns("AZ"), Kriter, S1.Columns("R")) - WF.SumIf(S1.Columns("AZ"), Kriter, S1.Columns("S"))
        S2.Cells(X, 8) = S2.Cells(X, 9) / S2.Cells(X, 7)
    
        S2.Cells(X, 10) = WF.SumIf(S1.Columns("AZ"), Kriter, S1.Columns("AC"))
        S2.Cells(X, 12) = WF.SumIf(S1.Columns("AZ"), Kriter, S1.Columns("AB"))
        S2.Cells(X, 11) = S2.Cells(X, 12) / S2.Cells(X, 10)
    
        S2.Cells(X, 13) = WF.SumIf(S1.Columns("AZ"), Kriter, S1.Columns("AE"))
        S2.Cells(X, 15) = WF.SumIf(S1.Columns("AZ"), Kriter, S1.Columns("AD"))
        S2.Cells(X, 14) = S2.Cells(X, 15) / S2.Cells(X, 13)
    Next
    
    S1.Columns("AZ").Delete
    S2.Range("A4").Resize(X - 4, 15).Borders.LineStyle = 1
    S2.Cells.EntireColumn.AutoFit
    S2.Select
    
    Set WF = Nothing
    Set S1 = Nothing
    Set S2 = Nothing
    
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    
    MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & _
           "İşlem süresi ; " & Format(Timer - Zaman, "0.000") & " Saniye", vbInformation, "Bilgilendirme"
End Sub
 
Geri
Üst