Birden çok kritere göre veri sorgulama

Katılım
5 Nisan 2007
Mesajlar
89
Excel Vers. ve Dili
2007
Merhabalar,
Elimde 10.000 kayıt ve 19 Sütundan oluşan bir liste var, kabaca arıza yapan cihaz(~35 çeşit), arıza tarihi(12 ay), müdahale tarihi, garanti durumu(3 çeşit) vs. bilgilerden oluşuyor. Bunun dönem dönem raporlanması ve grafiklendirilmesi gerekiyor. Kriterler, garanti durumuna göre cihazların hangi aylarda ne kadar arıza yaptığı şeklinde. Formüllerle çok uzun, karmaşık oluyor, dosya yavaşlıyor, bazen tutarsızlık oluyor, manuel kontrol uzun sürüyor vs. o yüzden makro ile bu işi yapmayı düşünüyorum. Belirli aralıklarla verileri özetleyip grafiklerini çizdirteceğim.
Asıl sorunum şu ki, bu işlemi hangi yöntemle yapmalıyım? Döngülerle bir sorgulama yaptığım zaman işlemler uzun sürüyor. Deneme amaçlı olarak dosyamı 1000 kayıda indirdim, 2 kritere göre (cihazların hangi ayda kaç tane arıza yaptığı) sorgulama 54 saniye sürdü. Bunun yerine ADO-DAO kullanmak daha mı mantıklıdır? Bu konuda bilgim az (biraz sql bilirim), o yüzden işe el atmadan önce sizden bir fikir almak istedim.
Daha önce benzer bir konu, Günün Sorusu şeklinde sormulmuş ( http://www.excel.web.tr/f142/veri-taban-305-ndan-se-231-ilen-kriterlere-t30754.html ) ama tam olarak istediğim yanıtı alamadım ve dosyalar maalesef daha yerine koyulamamış.
Soru biraz uzun oldu ama tam olarak anlatmak istedim. İlgilenenlere teşekkürler...
Not kullandığım kodlar şu şekilde:
Kod:
For Cihaz = 2 To 36 'Cihaz Sayısı
    Toplam = 0
    Dim KacTane(13)
    For i = 5 To SonSatir 'Verilerin sayısı, yaklaşık bin tane denedim
        For Ay = 1 To 12
            If IsDate(S1.Cells(i, "A").Value) Then
                If S1.Cells(i, "H") = "Sözleşmeli" And S1.Cells(i, "K") = S2.Cells(Cihaz, "H").Value _
                And Month(S1.Cells(i, "A").Value) = Ay Then KacTane(Ay) = KacTane(Ay) + 1
            End If
        Next
        If S1.Cells(i, "H") = "Sözleşmeli" And S1.Cells(i, "K") = S2.Cells(Cihaz, "H").Value _
        Then Toplam = Toplam + 1
    Next

    For i = 1 To 12
        Sheets("Grafik Verileri").Cells(Cihaz + 1, i + 1).Value = KacTane(i)
    Next
    Sheets("Grafik Verileri").Cells(Cihaz + 1, "N").Value = Toplam
    Erase KacTane()
Next


Bitis = Time

MsgBox "Sorgulama Süresi: " & Format(Bitis - Basla, "hh:mm:ss")
 
Katılım
22 Nisan 2005
Mesajlar
486
Excel Vers. ve Dili
tarkan@tarkanvural.com.tr
yanıt

Merhaba,

Deneme amaçlı bir dosya ekler misiniz ?
Alanların dizilimini görürsem yorumlarım. 100-200 veri kafii gelir.
Sonrasında hız testini yaparız.
 
Üst