30 Gün Önceki Tarih

Katılım
8 Nisan 2005
Mesajlar
758
Excel Vers. ve Dili
Excel 2010 Türkçe
Kod:
 Dim File_Path As String, X As Date, Say As Byte
Dim Min_Date As Date, Max_Date As Date
Yukarıdaki kod Korhan Hoca'nın bana yardımcı olduğu bir çalışmasından. Haliyle kodun uzunca devamı var. Yüzlerce satırdan oluşan faturaları tarihleri itibariyle onar günlük 3 dosyaya ayırarak kaydediyor. Kaydederken tarihi bugünü esas alıyor.
Yukarıdaki kodlarda AsDate tanımını (Date-30), yani 30 gün öncesinin tarihi olarak tanımlayabilir miyiz. Biraz daha anlaşılabilir olması için şöyle de söyleyeyim. Bugün üzerinde çalıştığım dosyayı kaydederken bu tanımla dosyaya 2023-12 isim vererek kaydediyor. Bir değişiklik yaparak 30 gün öncesi tarihini esas alarak 2023-11 olarak kaydedebilirmiyiz.

Basit anlaşılmaması için şunu da belirteyim, Korhan hocamın yaptığı çalışma dosyayı üçe bölüyor, her birine 2023-12-1 , 202312-2 , 2023-12-3 ismini veriyor.
Benim hedefim ise 2023-11-1 , 2023-11-2 , 2023-11-3

Yardım edecek arkadaşlara peşinen teşekkür ederim.
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,340
Excel Vers. ve Dili
2007 Türkçe
Merhaba,
Paylaştığınız kod bloğuna göre kodunuzda en az 5 değişken var: Bunlardan biri (File_Path) metin, biri (Say) 0-255 arası bir sayı, üç tanesi de (X, Min_Date, Max_Date) tarih.
Paylaştığınız koddan daha fazlasını anlayamıyorum.
Umarım doğru yardımcı olabilmişimdir. İyi çalışmalar.
 
Katılım
8 Nisan 2005
Mesajlar
758
Excel Vers. ve Dili
Excel 2010 Türkçe
ÖmerBey hocam, yeterli olur sandığım için kodun değişkenlerini yazmıştım. Kodun tamamı aşağıda.
Kod:
Sub CsvKaydet()
    Dim File_Path As String, X As Date, Say As Byte
    Dim Min_Date As Date, Max_Date As Date
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    File_Path = ThisWorkbook.Path
    
    Range("A2:Y" & Rows.Count).Sort Range("B2"), xlAscending

    Min_Date = WorksheetFunction.Min(Range("B:B"))
    Max_Date = WorksheetFunction.Max(Range("B:B"))
    
    For X = Min_Date To Max_Date Step 10
        Range("A1:Y" & Rows.Count).AutoFilter 2, ">=" & CLng(CDate(X)), xlAnd, "<=" & CLng(CDate(X + 9))
        If Cells(Rows.Count, 2).End(2).Row > 1 Then
            Range("A1:Y" & Cells(Rows.Count, 2).End(3).Row).Copy
            Workbooks.Add (1)
            Range("A1").PasteSpecial
            Range("A1").Select
            Columns.AutoFit
            Say = Say + 1
            ActiveWorkbook.SaveAs File_Path & "\" & "GELENNA_" & Format(Date, "yyyy_mm") & "_" & Say & " .csv", FileFormat:=xlCSV, Local:=True
            ActiveWorkbook.Close 0
        End If
    Next
    
    On Error Resume Next
    ActiveSheet.ShowAllData
    On Error GoTo 0
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    
    Columns("A:F").Select
    Selection.AutoFilter
    Range("A2:Y2000").ClearContents
    Range("A102:Y2000").Delete Shift:=xlUp
    Range("A1").Select
    
    MsgBox "Veriler CSV formatında " & Say & " adet dosyaya aktarılmıştır.", vbInformation
End Sub
Muhtemelen benim anlatamadığımı siz koddan anlayacaksınız.
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,340
Excel Vers. ve Dili
2007 Türkçe
Merhaba,
Dosyanız bu satırda isimlendirilip kaydediliyor. Buradaki Date ifadesinde değişiklik yapmanız gerekiyor.
Rich (BB code):
ActiveWorkbook.SaveAs File_Path & "\" & "GELENNA_" & Format(Date, "yyyy_mm") & "_" & Say & " .csv", FileFormat:=xlCSV, Local:=True
Bir ay öncesi için DateAdd("M",-1,Date) ifadesini kullanabilirsiniz.
 
Katılım
8 Nisan 2005
Mesajlar
758
Excel Vers. ve Dili
Excel 2010 Türkçe
Ömerbey hocam, Doğru mu anladım.
Kod:
ActiveWorkbook.SaveAs File_Path & "\" & "GELENNA_" & Format(DateAdd("M",-1,Date), "yyyy_mm") & "_" & Say & " .csv", FileFormat:=xlCSV, Local:=True
Yok eğer bu tanım değişkenler tanımlanırken yapılacak ise hangi satırda.
Bu iş ne kadar bildiğimi\bilmediğimi şöyle anlatayım, bu kodlar sağolsun Korhan Hocamın. Ben sadece 7 tek harf ekledim, GELENNA.
O nedenle hata yapmamak için tekrar sodum.
 
Son düzenleme:

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,340
Excel Vers. ve Dili
2007 Türkçe
Date ifadesini tek başına kullandığınızda tarih değerini döndürür.
Dim .... As Date gibi bir ifadede ise ilgili değer tarih olarak tanımlanır.
Sizin tarih olarak tanımlanan değişkenlerin dosya adı ile alakası yok. B sütununda bulunan en küçük ve en büyük tarih arasında döngü kurmak için oluşturulmuş.
Sizin sorunuzdan anladığım kadarıyla siz dosya adının bir ay öncesine göre oluşturulmasını istiyordunuz. Bu da yukarıda yazdığınız kodla olur.
 
Katılım
8 Nisan 2005
Mesajlar
758
Excel Vers. ve Dili
Excel 2010 Türkçe
Benim bile anlayacağımız şekilde izah etmişsiniz.
Tekrar teşekkür ederim.
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,340
Excel Vers. ve Dili
2007 Türkçe
Rica ederim,
İyi çalışmalar...
 
Üst