İki Tarih arasındaki gün sayısını bulma

mars2

Altın Üye
Katılım
2 Eylül 2004
Mesajlar
568
Excel Vers. ve Dili
2016 - Türkçe
2019 - Türkçe
Altın Üyelik Bitiş Tarihi
26-03-2026
İyi Günler;

Aşağıdaki makro ile iki tarih arasındaki yıl ay ve günü bulunmakta, ancak bu iki tarih arasındaki, toplam gün sayısını veren makroya ihtiacım bulunmaktadır.

Örnek
B C D
01.01.2024 31.12.2024 365

Function tarihfarki(KüçükTarih As Date, BüyükTarih As Date) As String
Dim years, months, days, m
years = Year(BüyükTarih) - Year(KüçükTarih)
If Month(KüçükTarih) > Month(BüyükTarih) Then
years = years - 1
End If
If Month(BüyükTarih) < Month(KüçükTarih) Then
months = 12 - Month(KüçükTarih) + Month(BüyükTarih)
Else
months = Month(BüyükTarih) - Month(KüçükTarih)
End If
If Day(BüyükTarih) < Day(KüçükTarih) Then
months = months - 1
If Month(BüyükTarih) = Month(KüçükTarih) Then
years = years - 1
months = 11
End If
End If
days = Day(BüyükTarih) - Day(KüçükTarih)
If days < 0 Then
m = CInt(Month(BüyükTarih)) - 1
If m = 0 Then m = 12
Select Case m
Case 1, 3, 5, 7, 8, 10, 12
days = 31 + days
Case 4, 6, 9, 11
days = 30 + days
Case 2
If (Year(BüyükTarih) Mod 4 = 0 And Year(BüyükTarih) _
Mod 100 <> 0) Or Year(BüyükTarih) Mod 400 = 0 Then
days = 29 + days
Else
days = 28 + days
End If
End Select
End If
tarihfarki = CStr(years) + " Yıl " + CStr(months) _
+ " Ay " + CStr(days) + " Gün "
End Function
 

mars2

Altın Üye
Katılım
2 Eylül 2004
Mesajlar
568
Excel Vers. ve Dili
2016 - Türkçe
2019 - Türkçe
Altın Üyelik Bitiş Tarihi
26-03-2026
Sayın Zekigursoy;

İlginiz için teşekkürler; örnekte uyguladığımda aşağıdaki hata vermektedir.

254975


254974
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
638
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
userforma tarihleri girip entere basınız
 

Ekli dosyalar

Mdemir63

Altın Üye
Katılım
7 Temmuz 2006
Mesajlar
2,888
Excel Vers. ve Dili
Ofis2010 32Bit Türkçe
Altın Üyelik Bitiş Tarihi
19-02-2026
Selam

Alternatif olsun. Kodları bir modül içine yazıp deneyiniz.
Kod:
Sub ikiTarihArasiGunSayisi()
      Dim bastar As Date: Dim bittar As Date: Dim GunSayisi As Integer
      bastar = InputBox("Başlangıç Tarihi Giriniz :", "Başlangıç Tarihi")
      bittar = InputBox("Bitiş Tarihi Giriniz :", "Bitiş Tarihi")
      
      GunSayisi = DateDiff("d", bastar, bittar)
      
      MsgBox "Gün Sayısı : " & GunSayisi, vbInformation, Application.UserName
End Sub
 

mars2

Altın Üye
Katılım
2 Eylül 2004
Mesajlar
568
Excel Vers. ve Dili
2016 - Türkçe
2019 - Türkçe
Altın Üyelik Bitiş Tarihi
26-03-2026
Sayın Muhasebeciyiz;

Örnek için teşekkürler; hesaplamayı tablo üzerinden yaptığımdan userform kullanmadan makro olması daha iyi olacağını düşünmekteyim.
 

ÖmerBey

Destek Ekibi
Destek Ekibi
Katılım
22 Ekim 2012
Mesajlar
4,406
Excel Vers. ve Dili
2007 Türkçe
Merhaba,
Fonksiyon VBA içinde değil de hücrede kullanılacaksa alternatif olarak yerleşik işlev olan ETARİHLİ kullanılabilir.
Kod:
=ETARİHLİ(B1;C1;"D")
İyi çalışmalar...
 

mars2

Altın Üye
Katılım
2 Eylül 2004
Mesajlar
568
Excel Vers. ve Dili
2016 - Türkçe
2019 - Türkçe
Altın Üyelik Bitiş Tarihi
26-03-2026
Ustadım ÖmerBey;
Tabloda vermiş olduğunuz formülü uygulamaktayım, ancak makro istememin amacı hücrede işlem yaparken silenmesi ve bozulmasına karşı olduğundan
 

muhasebeciyiz

Altın Üye
Katılım
10 Şubat 2006
Mesajlar
638
Excel Vers. ve Dili
Office 2016
64 Bit
Altın Üyelik Bitiş Tarihi
21-12-2027
Sub IkiTarihArasiGunSayisi()
Dim bastar As Date
Dim bittar As Date
Dim GunSayisi As Integer

bastar = Range("B1").Value

bittar = Range("C1").Value

GunSayisi = DateDiff("d", bastar, bittar)

Range("D1").Value = GunSayisi
End Sub

BCD olarak sonucu görebilirsiniz
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,451
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

Kaçırdığım bir durum yoksa işin özünde büyük tarihten küçük tarihi çıkarırsanız size gün sayısını verecektir.

254992

Aşağıdaki makro gün farkını hesaplayıp hücreye değer olarak yazar. Kendi dosyanıza göre revize edebilirsiniz.

C++:
Option Explicit

Sub Hesapla()
    Dim WS As Worksheet, Last_Row As Long
    
    Set WS = Sheets("Sheet1")
    Last_Row = WS.Cells(WS.Rows.Count, 1).End(3).Row

    With WS.Range("C1")
        .Resize(WS.Rows.Count).ClearContents
        .Resize(Last_Row).Formula = "=B1-A1"
        .Resize(Last_Row).Value = .Resize(Last_Row).Value
        .Resize(Last_Row).NumberFormat = "#,##0"
    End With
End Sub
 
Üst