Belirtilen iki tarih aralığını satırlara yazma

meleklerim

Altın Üye
Katılım
2 Ekim 2013
Mesajlar
330
Excel Vers. ve Dili
ofis 2019 türkçe
windows 10 pro türkçe
Altın Üyelik Bitiş Tarihi
23-07-2025
Elimde bazı olayların başlangıç ve bitiş tarihlerinin olduğu bir tablo var. Ben yandaki sütuna bu aralıkları gün gün sıralamak istiyorum. Örneğin B sütununda başlangıç 15.01.2019, C sütununda bitiş 18.01.2019 yazıyorsa D sütununa 15.01.2019, 16.01.2019, 17.01.2019, 18.01.2019 değerlerini alt alta satırlara otomatik olarak yazılmasını istiyorum. Örnek dosyayı ekliyorum. Yardımcı olacaklara şimdiden teşekkür ederim
 

Ekli dosyalar

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,167
Excel Vers. ve Dili
2019 Türkçe
Merhaba.
Aşağıdaki kodu sayfanın kod kısmına kopyalayıp çalıştırın.

Kod:
Sub Test()
    Dim Bak As Integer
    Dim Satir As Integer
    Dim Fark As Long
    Range("D2:D" & Rows.Count).ClearContents
    For Bak = 2 To Cells(Rows.Count, "B").End(xlUp).Row
        Satir = Cells(Rows.Count, "D").End(xlUp).Row + 1
        Cells(Satir, "D") = FormatDateTime(Cells(Bak, "B"), vbShortDate)
        If Not Cells(Bak, "C") = "" Then
            Fark = Cells(Bak, "C") - Cells(Bak, "B")
            Range("D" & Satir + 1 & ":D" & Satir + Fark).Formula = "=1 + D" & Satir
        End If
    Next
    Range("D2:D" & Satir + Fark).NumberFormat = "dd/mm/yyyy"
    Range("D2:D" & Satir + Fark).Copy
    Range("D2").PasteSpecial xlPasteValues
    Application.CutCopyMode = False
End Sub
 
Son düzenleme:

meleklerim

Altın Üye
Katılım
2 Ekim 2013
Mesajlar
330
Excel Vers. ve Dili
ofis 2019 türkçe
windows 10 pro türkçe
Altın Üyelik Bitiş Tarihi
23-07-2025
yardımcı olduğunuz için çok teşekkür ederim, işimi görüyor
 

meleklerim

Altın Üye
Katılım
2 Ekim 2013
Mesajlar
330
Excel Vers. ve Dili
ofis 2019 türkçe
windows 10 pro türkçe
Altın Üyelik Bitiş Tarihi
23-07-2025
Yalnız kullanımda bir hatası çıktı. Şöyle ki, başlangıç ve bitiş tarihlerini tek tek girip her tarihten sonra makroyu çalıştırınca hatasız veriyor. Ama tabloda tüm tarihler önceden girilmiş ise sadece tablonun son satırına kadar veriyor. Yani D ye veri girmeyi B nin satır sayısınca yapıyor.
kodun çalışma mantığınn böyle olması gerekiyor ancak kırmızı ile yazdığım adımda sadece B nin satır sayısı kadar gidiyor.
#B2 ile c2 ye bak
#iki tarih arasını D2 den başlayarak satırlara yaz
#B3 ile C3 e bak
#iki tarih arasını D nin son boş satırından başlayarak sırala
#
B sutununda son dolu satıra kadar git

@Muzaffer Ali
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,167
Excel Vers. ve Dili
2019 Türkçe
Ben pek bir şey anlamadım.
D sütununu en son sıralama mı yapsın?
 

meleklerim

Altın Üye
Katılım
2 Ekim 2013
Mesajlar
330
Excel Vers. ve Dili
ofis 2019 türkçe
windows 10 pro türkçe
Altın Üyelik Bitiş Tarihi
23-07-2025
tek tek girince sorunsuz zaten. ama bazen girilen baş ve bit tarihleri güncelleniyor, siliniyor vs. o zaman makro çalışınca sadece B sütünun satır sayısınca gidiyor. daha ileri gitmiyor. Her seferinde tabloya veri eklendiğinde, silindiğinde, değitirildiğinde toplu halde de tabloyu baştan sıralayabilmeli
 

meleklerim

Altın Üye
Katılım
2 Ekim 2013
Mesajlar
330
Excel Vers. ve Dili
ofis 2019 türkçe
windows 10 pro türkçe
Altın Üyelik Bitiş Tarihi
23-07-2025
sizi de yoruyorum hakkınızı helal edin
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,167
Excel Vers. ve Dili
2019 Türkçe
tek tek girince sorunsuz zaten. ama bazen girilen baş ve bit tarihleri güncelleniyor, siliniyor vs. o zaman makro çalışınca sadece B sütünun satır sayısınca gidiyor. daha ileri gitmiyor. Her seferinde tabloya veri eklendiğinde, silindiğinde, değitirildiğinde toplu halde de tabloyu baştan sıralayabilmeli
Başlama tarihleri B sütununda yazdığına göre elbette B sütununun sayısınca olacak, eğer B'de tarih yoksa zaten durması gerekir.

Kodları revize ettim aşağıdaki kodlar daha verimli çalışır.

Kod:
Sub Test()
    Dim Bak As Integer
    Dim Satir As Integer
    Dim Fark As Long
    Dim BakFark As Long
    Range("D2:D" & Rows.Count).ClearContents
    For Bak = 2 To Cells(Rows.Count, "B").End(xlUp).Row
        Satir = Cells(Rows.Count, "D").End(xlUp).Row + 1
        Cells(Satir, "D") = FormatDateTime(CDate(Cells(Bak, "B")), vbShortDate)
        If Not Cells(Bak, "C") = "" Then
            Fark = Cells(Bak, "C") - Cells(Bak, "B")
            For BakFark = Satir + 1 To Satir + Fark
                Cells(BakFark, "D") = FormatDateTime(1 + CDate(Cells(BakFark - 1, "D")), vbShortDate)
            Next
        End If
    Next
   
    MsgBox "Tamamlandı."
End Sub
 
Son düzenleme:

meleklerim

Altın Üye
Katılım
2 Ekim 2013
Mesajlar
330
Excel Vers. ve Dili
ofis 2019 türkçe
windows 10 pro türkçe
Altın Üyelik Bitiş Tarihi
23-07-2025
teşekkürler, sıralamanız güne göre sıralıyor. Aya yıla bakmıyor. O bakımdan benim için kullanışsız. .Sıralama B sütunu için olsaydı daha kullanışlı olurdu. Sıralamayı çıkardığımda da userform üzerinde şu stırında hata veriyor
Cells(BakFark, "D") = FormatDateTime(1 + CDate(Cells(BakFark - 1, "D")), vbShortDate)

örnek dosyada çalışırken o hatayı almıyorum halbuki. Sıralamasız halini atabilir misiniz? dedğiniz yerden silince end if next with hangisi kalacak çıkacak çözemiyorum
 

meleklerim

Altın Üye
Katılım
2 Ekim 2013
Mesajlar
330
Excel Vers. ve Dili
ofis 2019 türkçe
windows 10 pro türkçe
Altın Üyelik Bitiş Tarihi
23-07-2025
malesef bazen sonsuz bir döngüye giriyor, sayfanın son satırına kadar yazıyor (c deki bitiş tarihini dikkate almıyor) bazen hiç çalışmıyor. Sizide yordum kusurua bakmayın eski sistem elle girmeye devam anlaşılan
 

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,167
Excel Vers. ve Dili
2019 Türkçe
malesef bazen sonsuz bir döngüye giriyor, sayfanın son satırına kadar yazıyor (c deki bitiş tarihini dikkate almıyor) bazen hiç çalışmıyor. Sizide yordum kusurua bakmayın eski sistem elle girmeye devam anlaşılan
Örnek dosyanız baz alındığında yukarıdaki kod ile bu söylediklerinizin olması mümkün değil.
Gerçek dosyanızın örnek dosyanızdan farklı olduğunu düşünüyorum.
Eğer gerçek dosyanızı paylaşırsanız sorunu çözmeye çalışırım.
Aksi halde iyi çalışmalar.
 

meleklerim

Altın Üye
Katılım
2 Ekim 2013
Mesajlar
330
Excel Vers. ve Dili
ofis 2019 türkçe
windows 10 pro türkçe
Altın Üyelik Bitiş Tarihi
23-07-2025
Muzaffer Bey, günaydın.
Öncelikle hatanın nereden kaynaklandığını sanırım buldum. Normal kendisinin eklendiği excel sayfasında dediğiniz gibi çalışıyor. Ben userform üzerinden çalıştırmaya çalışınca ortalık karışıyor. :). Bu kodlardaki tüm satır ve sütunların çalışacağı sayfaların adını ekleyip güncelleme şansımız var mı? Yani mesala
Range("D2: D" & Rows.Count).ClearContents satırını
Worksheets ("sheets12").Range(".........).ClearContens gibi

Ya da bu makroyu userformda kullanabileceğim başka bir öneriniz?

Çok yordum hakkınızı helal edin, selamlar
@Muzaffer Ali
 

modoste

Altın Üye
Katılım
31 Mayıs 2008
Mesajlar
3,640
Excel Vers. ve Dili
Microsoft OFFİCE Ev ve İş 2019 TR
Altın Üyelik Bitiş Tarihi
18-03-2025
formülle çözüm yapabilir miyiz sayın hocalarım
 

meleklerim

Altın Üye
Katılım
2 Ekim 2013
Mesajlar
330
Excel Vers. ve Dili
ofis 2019 türkçe
windows 10 pro türkçe
Altın Üyelik Bitiş Tarihi
23-07-2025
kodun d2 sütunu seçmeden önce başına Sheets("Tatil").Select ekleyince "Tatil" adlı sayfada çalıştı. Emeği geçen ilgilenen herkese çok teşekkür ederim
-----
Sub Test()
Dim Bak As Integer
Dim Satir As Integer
Dim Fark As Long
Dim BakFark As Long
Sheets("Tatil").Select
Range("D2:D" & Rows.Count).ClearContents
For Bak = 2 To Cells(Rows.Count, "B").End(xlUp).Row
Satir = Cells(Rows.Count, "D").End(xlUp).Row + 1
Cells(Satir, "D") = FormatDateTime(CDate(Cells(Bak, "B")), vbShortDate)
If Not Cells(Bak, "C") = "" Then
Fark = Cells(Bak, "C") - Cells(Bak, "B")
For BakFark = Satir + 1 To Satir + Fark
Cells(BakFark, "D") = FormatDateTime(1 + CDate(Cells(BakFark - 1, "D")), vbShortDate)
Next
End If
Next

MsgBox "Tamamlandı."
End Sub
-----
 
Üst