İki Tarih Arasındaki Farkı Bulma

İki Tarih Arasındaki Farkı Bulma

  • Konuyu başlatan Konuyu başlatan ssavas
  • Başlangıç tarihi Başlangıç tarihi
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...

ssavas

Pro Üye
Kullanıcı
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Merhaba arkadaşlar.
İki tarih arası hesaplama için basit bir form tasarladım. Ekran görüntüsünden de görüleceği üzere bir yıl 364 gün çıkıyor. Normalde bir yıl 365 gündür.
Kod bloğunda nasıl bir düzenleme yapmalıyım ki gün farkı 365 ve katları gün olsun, ay farkı da 12 ay ve katları olsun.
Ekran görüntüsü 2023-04-05 114735.webp

C++:
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Label107.Caption = CDate(TextBox2) - CDate(TextBox1)
Label108.Caption = DateDiff("m", TextBox1.Text, TextBox2.Text)

tarih = TextBox2.Text
tarih1 = TextBox1.Text
ilkgun = Mid(tarih, 1, 2): songun = Mid(tarih1, 1, 2)
ilkay = Mid(tarih, 4, 2): sonay = Mid(tarih1, 4, 2)
ilkyil = Mid(tarih, 7, 4): sonyil = Mid(tarih1, 7, 4)
If ilkgun < songun Then ilkgun = ilkgun + 30: ilkay = ilkay - 1
If ilkay < sonay Then ilkay = ilkay + 12: ilkyil = ilkyil - 1
yil = ilkyil - sonyil
ay = ilkay - sonay
gun = ilkgun - songun
If ilkay - sonay > 12 Then ay = ay - 12: yil = yil + 1

Label109.Caption = yil & " YIL " & ay & " AY " & gün & " GÜN "
End Sub
 

Ekli dosyalar

DateDiff kullanmayı deneyin. İki tarih arasındaki farkı verir. Tırnak içindeki harfler d gün, y yıl, m, ay..
DateDiff("d", tarih1, tarih2)
 
Üstat teşekkür ederim ilginize.
Kod blouğunda DateDiff kullanmışım.
Kod:
Label108.Caption = DateDiff("m", TextBox1.Text, TextBox2.Text)
İşlem sonucunu 11 ay 30 gün olarak hesaplıyor. Benim istediğim 30 gün'ü de 1 ay olarak değerlendirip 12 ay olarak hesaplaması.
 
Bilgisayarda değilim ama fikrimi yazayım.
-- öncelikle ilgili tarihlerin hesaplamaya dahil olup olmadığının kararı verilmelidir.
-- kullandığınız kodda +30 şeklinde bir yer var. Bu kısım sorunlu bence.
-- olması gereken sonuçların netleşmesi bakımından excel hücreleri üzerinde örneklendirme yaparsanız iyi olur.
 
"Sen de hep link veriyorsun" diyeceksiniz muhtemelen ama... bu tür sorunlar düşünülerek hazırlanmış onlarca hazır dosyamız var.


Üstteki dosya sanırım tam istediğinizin cevabı.

1680715347458.webp


Ve makrolar ile sonuç alınıyor..
İncelemeniz faydalı olacaktır.
 
Kod:
Private Sub CommandButton1_Click()
temizle
End Sub

Private Sub TextBox1_Change()
TextBox1 = Format(TextBox1, "00"".""00"".""0000")
End Sub
Private Sub TextBox2_Change()
TextBox2 = Format(TextBox2, "00"".""00"".""0000")
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
'Label107.Caption = CDate(TextBox2) - CDate(TextBox1)
'Label108.Caption = DateDiff("m", TextBox1.Text, TextBox2.Text)
'
'tarih = TextBox2.Text
'tarih1 = TextBox1.Text
'ilkgun = Mid(tarih, 1, 2): songun = Mid(tarih1, 1, 2)
'ilkay = Mid(tarih, 4, 2): sonay = Mid(tarih1, 4, 2)
'ilkyil = Mid(tarih, 7, 4): sonyil = Mid(tarih1, 7, 4)
'If ilkgun < songun Then ilkgun = ilkgun + 30: ilkay = ilkay - 1
'If ilkay < sonay Then ilkay = ilkay + 12: ilkyil = ilkyil - 1
'YIL = ilkyil - sonyil
'AY = ilkay - sonay
'GUN = ilkgun - songun
'If ilkay - sonay > 12 Then AY = AY - 12: YIL = YIL + 1

Label109.Caption = KidemSayisi(Me.TextBox1.Text, Me.TextBox2.Text)
Label115.Caption = KidemYilSayisi(Me.TextBox1.Text, Me.TextBox2.Text)
Label116.Caption = KidemAySayisi(Me.TextBox1.Text, Me.TextBox2.Text)
Label117.Caption = KidemGunSayisi(Me.TextBox1.Text, Me.TextBox2.Text)
End Sub

Private Sub temizle()
Dim Nesne As Control
For Each Nesne In Controls
Select Case TypeName(Nesne)
Case "TextBox", "ComboBox"
Nesne = ""
Nesne.Enabled = True
End Select
Next

Label109.Caption = ""
Label115.Caption = ""
Label116.Caption = ""
Label117.Caption = ""

End Sub


Function KidemSayisi(ByVal Bas As Date, Bit As Date) As String

Bit = Bit + 1
t1 = Bas
 
Do
    If DateAdd("m", 1, t1) > Bit Then Exit Do
    t1 = DateAdd("m", 1, t1)
    AY = AY + 1
Loop

YIL = Int(AY / 12)
AY = Int(AY Mod 12)
GUN = Int(Bit - t1)
KidemSayisi = YIL & " YIL, " & AY & " AY, " & GUN & " GÜN"
End Function

Function KidemAySayisi(ByVal Bas As Date, Bit As Date) As String

Bit = Bit + 1
t1 = Bas
 
Do
    If DateAdd("m", 1, t1) > Bit Then Exit Do
    t1 = DateAdd("m", 1, t1)
    AY = AY + 1
Loop

AY = Int(AY Mod 12)

KidemAySayisi = AY & " AY "
End Function

Function KidemYilSayisi(ByVal Bas As Date, Bit As Date) As String

Bit = Bit + 1
t1 = Bas
 
Do
    If DateAdd("m", 1, t1) > Bit Then Exit Do
    t1 = DateAdd("m", 1, t1)
    AY = AY + 1
Loop

YIL = Int(AY / 12)
KidemYilSayisi = YIL & " YIL"
End Function

Function KidemGunSayisi(ByVal Bas As Date, Bit As Date) As String

Bit = Bit + 1
t1 = Bas
 
Do
    If DateAdd("m", 1, t1) > Bit Then Exit Do
    t1 = DateAdd("m", 1, t1)
    AY = AY + 1
Loop

GUN = Int(Bit - t1)
KidemGunSayisi = GUN & " GÜN"
End Function
Zaten yapmışsınız, tam olarak istediğiniz revizyonu anlayamadım. Üstteki kodları UserForm'a yapıştırın.
 
Ekteki dosyayı inceleyiniz.
Not : İkinci tarih dahil edilerek istenilen sonuca ulaşılır. İkinci resminiz yanlıştır. 2 yıl 0 ay 2 gün olmalıdır. şubat 2024 29 gün çekmektedir.
 

Ekli dosyalar

Çözüm
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Benzer Konular Popüler İçerikler Daha Fazlası
Geri
Üst