• DİKKAT

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

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

mars2

Altın Üye
Katılım
2 Eylül 2004
Mesajlar
606
Excel Vers. ve Dili
2016 - Türkçe
2019 - Türkçe
İ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
 
Sayın Zekigursoy;

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

254975


254974
 
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
 
Sayın Muhasebeciyiz;

Örnek için teşekkürler; hesaplamayı tablo üzerinden yaptığımdan userform kullanmadan makro olması daha iyi olacağını düşünmekteyim.
 
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...
 
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
 
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
 
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
 
Geri
Üst