• DİKKAT

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

Başka sayfaya Rapor

Katılım
16 Ekim 2007
Mesajlar
143
Excel Vers. ve Dili
EXCEL 2003 TR
Arkadaşlar;
Bana bir makro lazım.Ben bu işlemi formül ile yaptırdım.Fakat işlemi üzerine uyguladığım form ile açtırmam 30 dk ları buluyor.Hemen anlatmaya başlıyorum.
Elimizde "Form" ve "Rapor" adlı iki sayfa var. "Form" sayfasının "J" sütunundaki sayı değeri olabilirde olmaya bilirde.(Bunu söylememin sebebi raporlamada boşlukarı vermeyecek) Eğer sayı değeri varsa önce "Form" sayfasındaki o satırın "A:J" arasındaki hücreleri aynen "Rapor" sayfasına kopyalayacak.Sonrada "K" sütunundan başlayarak "J" değeri kadar "A" sütununa (bu sütun tarih içeriyor) ekliyerek devam edecek.
Örneğin "Form!J1"in değeri 3, "Form!A1"de 1 Ocak 2000 olsun. "Rapor!K" 1 Şubat 2000, "Rapor!L" de 1 Mart 2000 olacak.
Yardımlarınız ve vakit ayırdığınız için şimdiden çok teşekkür ederim.
 
Sonuçlarıda gösterilmiş küçük bir örnek dosya ekleyebilirmisiniz?
 
Yardımınız ve zaman ayırdığınız için çok teşekkür ederim.
 
Aşağıdaki kodları deneyiniz.

Kod:
Sub Aktar()
Set s1 = Sheets("Form")
Set s2 = Sheets("Rapor")
s2.Range("a2:as1000").ClearContents
For i = 3 To s1.[j65536].End(3).Row
    If s1.Cells(i, "j").Value > 1 Then
        sat = s2.[a65536].End(3).Row + 1
        Range(s2.Cells(sat, "a"), s2.Cells(sat, "I")).Value = Range(s1.Cells(i, "b"), s1.Cells(i, "j")).Value
        s2.Cells(sat, "j").Value = s1.Cells(i, "a").Value
        For j = 1 To s1.Cells(i, "j").Value - 1
            tar = s2.Cells(sat, 9 + j).Value
            s2.Cells(sat, 10 + j).Value = CDate(Day(tar) & "/" & Month(tar) + 1 & "/" & Year(tar))
        Next j
    End If
Next i
MsgBox "Bitti"
Set s1 = Nothing
Set s2 = Nothing
End Sub
 
Sayın hocam,
program üzerinde taksit sayısı değerlerinde oynama yaptığımızda program hata veriyor.
 
Ne yaptığınızda nasıl bir hata veriyor?
 
gönderdiğiniz örnekte taksit sayılarında değişiklikler yapın. Örneğin ilk taksit sutununa 36 deyin.raporlama yaptığınızda hata veriyor
 
Koldarı aşağıdaki şekilde değiştiriniz.
Kod:
Sub Aktar()
Set s1 = Sheets("Form")  
Set s2 = Sheets("Rapor")
s2.Range("a2:as1000").ClearContents
For i = 3 To s1.[j65536].End(3).Row [COLOR=blue]'Form sayfasının 3.satırından j kolonunun son dolu[/COLOR] hücresine kadar
    If s1.Cells(i, "j").Value > 1 Then  [COLOR=blue]'eğer hücre 1'den büyük ise [/COLOR]
        sat = s2.[a65536].End(3).Row + 1 [COLOR=blue]'Rapor sayfasındaki son dolu hücresinin 1 fazlasına[/COLOR]
        Range(s2.Cells(sat, "a"), s2.Cells(sat, "I")).Value = Range(s1.Cells(i, "b"), s1.Cells(i, "j")).Value  '[COLOR=blue] Bu satırı kopyala[/COLOR]
        s2.Cells(sat, "j").Value = s1.Cells(i, "a").Value ' [COLOR=blue]Form sayfasının j kolonuna Rapor sayfasının a kolonunu kopyalaya[/COLOR]
        For j = 1 To s1.Cells(i, "j").Value - 1 ' [COLOR=blue]1'den taksit sayısının 1 eksiğine kadar.[/COLOR]
            tar = s2.Cells(sat, 9 + j).Value [COLOR=blue]' ilgili tarih tar değişgenine aktarılıyor[/COLOR]
            If Month(tar) + 1 < 13 Then [COLOR=blue]'&#304;lgili tarihin ay&#305; 12'den k&#252;&#231;&#252;k ise[/COLOR]
            ytar = CDate(Day(tar) & "/" & Month(tar) + 1 & "/" & Year(tar)) ' [COLOR=blue]Tarihe 1 ay ekle[/COLOR]
            Else
            ytar = CDate(Day(tar) & "/" & 1 & "/" & Year(tar) + 1) [COLOR=blue]'De&#287;il ise tarihi Ocak ve 1 y&#305;l sonras&#305;n&#305; yap[/COLOR]
            End If
            s2.Cells(sat, 10 + j).Value = ytar ' [COLOR=blue]sa&#287;a do&#287;ru ilgili kolona yeni tarihi yaz.[/COLOR]
        Next j
    End If
Next i
MsgBox "Bitti"
Set s1 = Nothing
Set s2 = Nothing
End Sub
 
Son düzenleme:
Say&#305;n Ripek,
Allah raz&#305; olsun. Makrodan anlamad&#305;&#287;&#305;m i&#231;in g&#252;nlerdir u&#287;ra&#351;&#305;yordum. Belki komik gelecek ama art&#305;k kodlar&#305; r&#252;yalar&#305;mda bile g&#246;rmeye ba&#351;lam&#305;&#351;t&#305;m. Sayenizde program&#305;m&#305; tamamlad&#305;m. Ellerinize sa&#287;l&#305;k. Tekrar tekrar te&#351;ekk&#252;r ederim.
 
Say&#305;n hocam,
E&#287;er mahsuru yoksa form&#252;llerin a&#231;&#305;klamas&#305;n&#305; eklermisiniz. B&#246;ylece benim gibi kodlamay&#305; &#246;&#287;renmeye &#231;al&#305;&#351;an arka&#351;lara yard&#305;mc&#305; olmu&#351; oluruz.
 
Dilimiz d&#246;nd&#252;&#287;&#252; kadar&#305;yla ilgili a&#231;&#305;klamalar&#305; yazmaya &#231;al&#305;&#351;t&#305;m.
 
Kendi çalışmamı ekliyorum. Acaba "Ayarlar" bölümü etkilermi.
 
Makronun &#231;al&#305;&#351;mas&#305; i&#231;in B kolonundaki Hesap Sahibi bilgilerinin dolu olmas&#305; gerekmektedir.

Yaln&#305;z burada &#351;u &#351;ekil bir problem ortaya &#231;&#305;kt&#305;.

&#304;&#351;lem Tarihi 31 veya 28-29 &#350;ubat'a denk geliyorsa di&#287;er aylarda bu g&#252;nler olmad&#305;&#287;&#305; i&#231;in do&#287;al olarak kodlar hata vermektedir.

Taksit g&#252;nleri mutlaka her ay&#305;n ayn&#305; g&#252;n&#252; m&#252; olmas&#305; gerekiyor?
 
Hay&#305;r.Zaten g&#246;rece&#287;iniz gibi bu bir taksitlendirme program&#305;.Do&#287;al olarak 29 &#351;ubat'a denk gelenlerler 1 ine devredebilir. 31 &#231;ekenlerde ide ayn&#305; &#351;ekilde 1 ine devredebilir. Birde dikkatimi &#231;eken 1 girilen de&#287;erlerde rapor k&#305;sm&#305;na ge&#231;miyor. yani raporlamaya &#231;&#305;km&#305;yor. Bu arada dedi&#287;iniz gibi B s&#252;tununa de&#287;er girince problem yok.
 
Son düzenleme:
O zaman kodlar&#305; a&#351;a&#287;&#305;daki &#351;ekilde de&#287;i&#351;tiriniz.

Kod:
Sub Aktar()
Set s1 = Sheets("Form")
Set s2 = Sheets("Rapor")
s2.Range("a2:as1000").ClearContents
For i = 3 To s1.[j65536].End(3).Row 'Form sayfas&#305;n&#305;n 3.sat&#305;r&#305;ndan j kolonunun son dolu h&#252;cresine kadar
    If s1.Cells(i, "j").Value <> "" Then  'e&#287;er h&#252;cre 1'den b&#252;y&#252;k ise
        sat = s2.[a65536].End(3).Row + 1 'Rapor sayfas&#305;ndaki son dolu h&#252;cresinin 1 fazlas&#305;na
        Range(s2.Cells(sat, "a"), s2.Cells(sat, "I")).Value = Range(s1.Cells(i, "b"), s1.Cells(i, "j")).Value  ' Bu sat&#305;r&#305; kopyala
        s2.Cells(sat, "j").Value = s1.Cells(i, "a").Value ' Form sayfas&#305;n&#305;n j kolonuna Rapor sayfas&#305;n&#305;n a kolonunu kopyalaya
        For j = 1 To s1.Cells(i, "j").Value - 1 ' 1'den taksit say&#305;s&#305;n&#305;n 1 eksi&#287;ine kadar.
            tar = CDate(s2.Cells(sat, 9 + j).Value) ' ilgili tarih tar de&#287;i&#351;genine aktar&#305;l&#305;yor
            s2.Cells(sat, 10 + j).Value = DateSerial(Year(tar), Month(tar) + 1, Day(tar)) ' sa&#287;a do&#287;ru ilgili tarihin 1 ay sonras&#305;n&#305; kolona  yaz.
        Next j
    End If
Next i
MsgBox "Bitti"
Set s1 = Nothing
Set s2 = Nothing
End Sub
 
Hocam, 30 ve 31 giri&#351;lilerde 3 g&#252;n 1 ay kayd&#305;r&#305;yor.
30 Ocak>2 Mart olarak &#231;&#305;k&#305;yor
31 Ocak>3 Mart olarak &#231;&#305;k&#305;yor
 
28-29 &#350;ubat'tan kaynaklan&#305;yor.
Ba&#351;ka &#231;&#246;z&#252;m bulmak i&#231;in biraz &#252;zerinde &#231;al&#305;&#351;mak gerekiyor..
 
Vakit ay&#305;rd&#305;&#287;&#305;n&#305;z i&#231;in te&#351;ekk&#252;r ederim Hocam. Ben ba&#351;tada s&#246;yledi&#287;im gibi bunu form&#252;lle halletmi&#351;tim. Fakat; hem 300 MB lar&#305; bulan dosya boyutu, hemde sayfay&#305; form ile s&#252;zmeye kalkt&#305;&#287;&#305;mda 25-30 dk lar&#305; bulan form a&#231;&#305;lmas&#305; sebebi ile bunun tek yolunun makro olaca&#287;&#305; d&#252;&#351;&#252;n&#252;yorum.
 
Geri
Üst