Özet Tabloda iki tarih aralıgında veri gösterme nasıldır

Katılım
19 Eylül 2007
Mesajlar
4
Excel Vers. ve Dili
Excell 2003
Excell 2007
Dış veri kaynagından veriyi ODBC ile dogrudan özet tablo ile alıyorum. Office 2003 kullanıyorum ve veri satırlarım cok fazla oldugundan dogrudan özet tabloya almak zorundayım. Office 2007 kullandım ama kullanım pratikliği 2003 de daha fazla.

ozet tabloya aldıgım veriyi işlem tarihine göre süzmek istiyorum. Öncelikli hedefim 2007 yılı basından ıtıbaren mevcut verılerımı, herhangı ıkı tarıh aralıgı verip o aralıktakı verılerı ozet tabloya tasımaktı. Biraz uğraştırdı, daha sonra bundan vazgecip sadece bitiş tarihi verip ( zaten baslangıc tarıhı belli 01.01.2007) o tarihe kadarkı verileri ozet tablo ekranına tasımak. Bu işlemleri yaparken de her seferınde dıs verı kaynagıyla ılıskı kurdurmuyorum. Zaten baslangıcta kac excell sayfam varsa hepsini dıs verı kaynagından güncelliyorum. Yapmak istediğimi güncellediğim veri üzerinde ozet tabloda süzme yaptırmak.

Bunun ıcın userform yaptım. ve ay sonlarını gosteren option butonlar koydum.
Ocak SONU tıkladııgmda 31.01.2007 tıbarıyle
Şubat SONU tıkladıgımda 01.01.2007-20.02.2007 arası vbbb

Bir başka yapmaya calıstıgım user form seklinde degil, ana sayfamda tarih için belirledigim B2 hucresine tıkladıgımda takvim acılsın ve bu takvimden sectıgım tarihe gore tum sayfaalrdakı ozet tablolarım o tarıhe kadarkı verileri göstersin.

Bu konuda eklerde resımlerde gondermeye calıstım. Yardımcı olmak ısteyen, veya olacak arkadslara simddien tesekkur ediyorum
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Anladığım kadarıyla; siz, özet tablo ile standart olarak oluşan, "açılan tarih kutusunu" kullanmak yerine, başka bir alana girdiğiniz tarihe göre Özet Tablonun veya Tablolarının şekillenmesini istiyorsunuz.

Yani "1 nolu" resimdeki gibi, tarihlere elle tik atmak yerine, bunu makronun belirttiğiniz tarihe kadar otomatik olarak yapmasını istiyorsunuz.

Söylediklerinizden, veritabanındaki tüm bilgilerin, mevcut özet tablolarda olduğunu anlıyorum.

Mevcut yapıyı bozmadan, kodlarla yapılamayacak birşey gibi durmuyor.

Farklı çözüm yolları da olabilir tabi ...

Excel 97 mi desem, XP mi ... Şu an, tam olarak hatırlamıyorum ama, bu tür bir işlemi birkaç yıl önce yapmıştım. 2003'te de sanırım Query hala duruyordur. Query'de sorgularınızı düzenleyebilir ve kritere uygun verileri Özet Tabloya atabilirsiniz. Ama, bu; her seferinde VT'ye sorgu göndermek anlamına gelir.

Makro kaydı ile de belki yapabilirsiniz Özet tabloyu oluşturmadan önce, bir makro kaydı başlatın ve özet tablo bittiğinde kaydı durdurun. Alt+F11 ile VBE'ye geçin ve kodları inceleyin.

Belki, veritabanı yöneticinizde view'ler de oluşturup, özet tabloda bu view'leri kullanabilirsiniz.

Forumun, SQL ve Kapalı Dosya uygulamaları bölümlerinde, Veritabanlarına nasıl sorgu çekileceğine ilişkin de bolca örnek var. Bunları da inceleyebilirsiniz.

Eğer yine de, herhangi bir çıkış yolu bulamazsanız, dosyanızın bir örneğini foruma ekleyiniz. Birşeyler ayarlarız :)
 
Katılım
19 Eylül 2007
Mesajlar
4
Excel Vers. ve Dili
Excell 2003
Excell 2007
Özet Tabloda Seçilen tarihe kadarki VERİYİ SÜZME

ACİLDİR ....

Dış veri kaynagından veriyi ODBC ile DOĞRUDAN özet tablo ile alıyorum. Office 2003 kullanıyorum ve veri satırlarım cok fazla oldugundan dogrudan özet tabloya almak zorundayım.

Grup şirketiyiz ve bura birtakım süzmeler yapmak istiyorum.
A SAYFASI
B SAYFASI vede bu iki sayfayı karsılaştrıma yapmak içİn KONTROL sayfam var.

KONTROL Sayfasındaki bir hücreye bağlı 3 userform yaptım.
1.cisi : Grup şirketlerinden birini seçtiriyor.
2.cisi : A ve B sayfasında seçilen grup şirketinde sadece tek bir ay seçip o aya aitverileri getiriyor.

3.CÜSÜ YANİ YAPMAK İSTEDİĞİM ANA MACRO İSE SEÇTİĞİM AY SONU İTİBARİYLE VERİ TABANINDAKİ TÜM VERİYİ A VE B SAYFALARINA TAŞIMAK.

Bu macroyu yazmaya çalıştım ama beceremedim. bu konuda yardımcı olursanız sevinirim. İlgili örnek bir excell kitabını macrolarıyla beraber ekte iletiyorum.


VEYA Bu sekildede olabilir.....

KONTROL Sayfasında herhangi bir hüzre belirleyip. o hücreey tıkladııgmda takvim açılsın. sectiğim tarihe kadarki veriler A ve B sayfasında gösterilsin. dolyısıyla buraya gelen seçilen tarihe kadarki verileri KONTROL sayfasında kıyaslayayım.

Şimdiden Teşekkür ederim... ACİLDİR
 
Son düzenleme:
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Ekteki dosyayı inceleyiniz.

Eğer Kümülatif kutucuğunu işaretlerseniz, Seçilen müşteriye göre, seçilen aya kadar olan toplamlar tabloya yansır.

Kutucuğu işaretlemezseniz, sadece seçilen aya ait bilgiler tabloya gelir.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Eğer Özet Tablo yapılarının (biçimlerinin) değiştirilmeden çözümünü isterseniz, daha önce gönderdiğim dosyadaki kodu, aşağıdaki ile değiştirin.

NOT : Özet tablo dizaynları, ilk gönderdiğiniz dosyadaki gibidir.

Kod:
Option Explicit
Sub MusteriSec()
Dim shK As Worksheet, shM As Worksheet, sh As Worksheet
Dim KasaBulM As Range, AyBulM As Range
Dim KasaBulK As Range, AyBulK As Range
Dim i As Long, j As Long
Dim ToplamBorcM As Long, ToplamAlacakM As Long
Dim ToplamBorcK As Long, ToplamAlacakK As Long
Dim Aylar As Variant
Set shK = Sheets("KASA")
Set shM = Sheets("MUHASEBE")
Set sh = Sheets("KONTROL")
Aylar = Array("Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara")
On Error Resume Next
sh.Range("c3:h6").ClearContents
With shK.PivotTables("Özet Tablo 1")
    .PivotFields("şirket").CurrentPage = "(Tümü)"
    .PivotFields("şirket").CurrentPage = sh.Range("T2").Value
End With
With shM.PivotTables("Özet Tablo 2")
    .PivotFields("şirket").CurrentPage = "(Tümü)"
    .PivotFields("şirket").CurrentPage = sh.Range("T2").Value
End With
If sh.Cells(1, 5) = False Then
 
   With shK.PivotTables("Özet Tablo 1")
       .PivotFields("belgetarihi").CurrentPage = "(Tümü)"
       .PivotFields("belgetarihi").CurrentPage = sh.Range("T1").Value
   End With
   With shM.PivotTables("Özet Tablo 2")
       .PivotFields("fiştarihi").CurrentPage = "(Tümü)"
       .PivotFields("fiştarihi").CurrentPage = sh.Range("T1").Value
   End With
   If shM.Cells(1, 2) = sh.Cells(2, 20) And shM.Cells(2, 2) = sh.Cells(1, 20) Then
      For i = 3 To 6
          Set KasaBulM = shM.Cells.Find(sh.Cells(i, 2), , , xlWhole)
          If Not KasaBulM Is Nothing Then
             sh.Cells(i, 3) = shM.Cells(KasaBulM.Row, 3)
             sh.Cells(i, 6) = shM.Cells(KasaBulM.Row, 4)
          End If
          Set KasaBulM = Nothing
          Set KasaBulK = shK.Cells.Find(sh.Cells(i, 2), , , xlWhole)
          If Not KasaBulK Is Nothing Then
             sh.Cells(i, 4) = shK.Cells(KasaBulK.Row, 3)
             sh.Cells(i, 7) = shK.Cells(KasaBulK.Row, 4)
          End If
          Set KasaBulK = Nothing
          sh.Cells(i, 5).Formula = "=C" & i & "-D" & i
          sh.Cells(i, 8).Formula = "=F" & i & "-G" & i
      Next i
   End If
Else
   With shM.PivotTables("Özet Tablo 2")
        For i = 3 To 6
            For j = 1 To sh.Cells(1, 4)
               .PivotFields("fiştarihi").CurrentPage = "(Tümü)"
               .PivotFields("fiştarihi").CurrentPage = Aylar(j - 1)
                If shM.Cells(1, 2) = sh.Cells(2, 20) And shM.Cells(2, 2) = sh.Cells(j + 1, 17) Then
                   Set KasaBulM = shM.Cells.Find(sh.Cells(i, 2), , , xlWhole)
                       If Not KasaBulM Is Nothing Then
                          ToplamBorcM = ToplamBorcM + shM.Cells(KasaBulM.Row, 3)
                          ToplamAlacakM = ToplamAlacakM + shM.Cells(KasaBulM.Row, 4)
                       End If
                   Set KasaBulM = Nothing
                End If
            Next j
            sh.Cells(i, 3) = ToplamBorcM
            sh.Cells(i, 6) = ToplamAlacakM
            ToplamBorcM = 0: ToplamAlacakM = 0
        Next i
   End With
 
   With shK.PivotTables("Özet Tablo 1")
        For i = 3 To 6
            For j = 1 To sh.Cells(1, 4)
               .PivotFields("belgetarihi").CurrentPage = "(Tümü)"
               .PivotFields("belgetarihi").CurrentPage = Aylar(j - 1)
                If shK.Cells(1, 2) = sh.Cells(2, 20) And shK.Cells(2, 2) = sh.Cells(j + 1, 17) Then
                   Set KasaBulK = shK.Cells.Find(sh.Cells(i, 2), , , xlWhole)
                       If Not KasaBulK Is Nothing Then
                          ToplamBorcK = ToplamBorcK + shK.Cells(KasaBulK.Row, 3)
                          ToplamAlacakK = ToplamAlacakK + shK.Cells(KasaBulK.Row, 4)
                       End If
                   Set KasaBulK = Nothing
                End If
            Next j
            sh.Cells(i, 4) = ToplamBorcK
            sh.Cells(i, 7) = ToplamAlacakK
            ToplamBorcK = 0: ToplamAlacakK = 0
        Next i
   End With
   For i = 3 To 6
       sh.Cells(i, 5).Formula = "=C" & i & "-D" & i
       sh.Cells(i, 8).Formula = "=F" & i & "-G" & i
   Next i
End If
Set shK = Nothing
Set shM = Nothing
Set sh = Nothing
End Sub
 
Üst