Yıllık İzin Süreleri

iplikci_80

Altın Üye
Katılım
29 Kasım 2007
Mesajlar
1,110
Excel Vers. ve Dili
excel 2007
Altın Üyelik Bitiş Tarihi
07-03-2026
Arkadaşlar yılık izin sürelerini takip etmeye çalıştığım kodların mevcut olduğu EK 'teki örnekte toplam hak edilen izin süresi 190 gün olması gerekirken 210 gün çıkıyor. Bu hususun düzeltilmesi hususunda yardımlarınız rica ediyorum.
 

Ekli dosyalar

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,863
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
kodu kim yazdı bilmiyorum ancak kod burada yıl bazında işlem yapıyor.

KidemYili = DateDiff("YYYY", GTarihi, izinTarihi)
işe giriş tarihinden bugünkü tarihi çıkartıyor ve yılı ona göre yazıyor.
dolayısıyla işe giriş tarihinin gün ve ay olarak bugünkü tarihin gün ve ay olarak da değerlendirilmesi lazım.

kodun bu bölümünü

Kod:
KidemYili = DateDiff("YYYY", GTarihi, izinTarihi)
bununla değiştir.
Rich (BB code):
ekle = 0
    yıl1 = CDate(Format(GTarihi, "dd.mm") & "." & Format(Now, "yyyy"))
    yıl2 = CDate(Format(izinTarihi, "dd.mm") & "." & Format(Now, "yyyy"))
    If yıl1 > yıl2 Then ekle = 1
    
    KidemYili = DateDiff("YYYY", GTarihi, izinTarihi) - ekle
 

iplikci_80

Altın Üye
Katılım
29 Kasım 2007
Mesajlar
1,110
Excel Vers. ve Dili
excel 2007
Altın Üyelik Bitiş Tarihi
07-03-2026
Sayın halit3 ilginize teşekkür ederim. Kodu Suskun dan temin etmiştim.
 

bkr-ylmz

Altın Üye
Katılım
26 Mayıs 2017
Mesajlar
45
Excel Vers. ve Dili
Türkçe 2021
Altın Üyelik Bitiş Tarihi
06-08-2027
Sayın halit3 bey;
doğumtarihi de sanırım yıl bazında işlem yapıyor, bu yüzden doğum tarihinin ay olarak değiştirmemiz formulü etkilemiyor, yanlış hata oluşuyor. Yukarıda gtarih ve izintarihi ne uyguladığınız kodları doğum tarihine nasıl uygulayabiliriz, yardımcı olabilir misiniz.
Ben aşağıdaki şekilde eklemeye çalıştım ama başaramadım.
Kod:
Function Izin(GTarihi As Date, izinTarihi As Date, Optional dogumtarihi As Date) As Integer
    Dim Yas, Eski, YasHesapla, izinyili, j, IzinGunu, KidemYili
    Dim TarihKontrol As Date
    On Error Resume Next
     'GTarih = işe giriş tarihi
    'Doğum tarihi girilmezse yaş sınırına göre hesaplama yapılmaz.
    Eski = False  '10/06/2003 tarihi ve öncesi izin günü hesaplatma
    YasHesapla = False    ' 18 yastan kücük 50 yastan büyük olanlar için enaz izin günü hesaplatma
ekle = 0
    yıl1 = CDate(Format(GTarihi, "dd.mm") & "." & Format(Now, "yyyy"))
    yıl2 = CDate(Format(izinTarihi, "dd.mm") & "." & Format(Now, "yyyy"))
    If yıl1 > yıl2 Then ekle = 1
    KidemYili = DateDiff("YYYY", GTarihi, izinTarihi) - ekle
    If KidemYili = 0 Then Exit Function
    
    If dogumtarihi > 0 Then YasHesapla = True
    
    For j = 1 To KidemYili
        
        TarihKontrol = DateAdd("YYYY", j, GTarihi)
        izinyili = DateDiff("YYYY", GTarihi, TarihKontrol)
    yıl3 = CDate(Format(dogumtarihi, "dd.mm.yyyy"))
    yıl4 = CDate(Format(TarihKontrol, "dd.mm.yyyy"))
        Yas = DateDiff("YYYY", yıl3, yıl4)
 
        If TarihKontrol <= #10/6/2003# Then Eski = True
        
        If izinyili < 1 Then IzinGunu = 0
        If izinyili >= 1 Then If Eski Then IzinGunu = 12 Else IzinGunu = 14
        If izinyili >= 6 Then If Eski Then IzinGunu = 18 Else IzinGunu = 20
        If izinyili >= 15 Then If Eski Then IzinGunu = 24 Else IzinGunu = 26
        If YasHesapla Then
            If Yas <= 18 Or Yas >= 50 And IzinGunu < 20 Then IzinGunu = 20
        End If
        Izin = Izin + IzinGunu
        IzinGunu = 0
        Eski = False
    Next
End Function
 

halit3

Uzman
Uzman
Katılım
18 Ocak 2008
Mesajlar
12,863
Excel Vers. ve Dili
2003 excell türkçe
ve
2007 excell türkçe
Sayın halit3 bey;
doğumtarihi de sanırım yıl bazında işlem yapıyor, bu yüzden doğum tarihinin ay olarak değiştirmemiz formulü etkilemiyor, yanlış hata oluşuyor. Yukarıda gtarih ve izintarihi ne uyguladığınız kodları doğum tarihine nasıl uygulayabiliriz, yardımcı olabilir misiniz.
Ben aşağıdaki şekilde eklemeye çalıştım ama başaramadım.
Kodu ben yazmadım ben sadece küçük bir ekleme yaptım.
 

iplikci_80

Altın Üye
Katılım
29 Kasım 2007
Mesajlar
1,110
Excel Vers. ve Dili
excel 2007
Altın Üyelik Bitiş Tarihi
07-03-2026
Sayın halit3 ün yazdığı aşağıdaki kodu kullanın


Function izin(isgiristar, dogtarihi, tarih)

If isgiristar = Empty Or dogtarihi = Empty Or tarih = Empty Then
izin = ""
Exit Function
End If

deg3 = 365.25
Son = Int(Int(((CDate(tarih) - CDate(isgiristar)) * 1) + 1) / deg3)
isgiristar = Int(Int(((CDate(tarih) - CDate(isgiristar)) * 1) + 1) / deg3)
dogtarihi = Int(Int(((CDate(tarih) - CDate(dogtarihi)) * 1) + 1) / deg3) - Son - 1

izin = 0
VERI = 0
deg1 = 0

bir = 14
iki = 20
uc = 26
yas1 = 18
yas2 = 50

For i = 1 To Son

If i >= 1 And i <= 5 Then
deg1 = bir
ElseIf i >= 6 And i <= bir Then
deg1 = iki
ElseIf i >= 15 Then
deg1 = uc
End If

If deg1 < iki Then
If dogtarihi + i <= yas1 Or dogtarihi + i >= yas2 Then deg1 = iki
End If

VERI = CDbl(VERI) + deg1
Next i
If VERI > 0 Then
izin = VERI
Else
izin = ""
End If

End Function
 

Suskun

Altın Üye
Altın Üye
Katılım
27 Kasım 2006
Mesajlar
292
Excel Vers. ve Dili
Excel 19
Altın Üyelik Bitiş Tarihi
24.05.2032
Merhaba,
Kodlar epeyce karışmış. Düzeltilmiş kodlar aşağıda.

Kod:
Function ToplamIzinGunu(GTarihi As Date, izinTarihi As Date, Optional dogumTarihi As Date) As Double
    Dim Eski As Boolean, yasHesapla As Boolean
    Dim j As Integer, IzinGunu As Integer, kidemYili As Integer
    Dim TarihKontrol As Date, Yas As Date, izinyili As Date
    On Error Resume Next
   ' GTarih = işe giriş tarihi
 
    yasHesapla = False    ' 18 yastan kücük 50 yastan büyük olanlar için enaz izin günü hesaplatma
    'kidemYili = DateDiff("m", GTarihi, izinTarihi) \ 12
    kidemYili = Int(DateDiff("m", GTarihi, izinTarihi) / 12)
    
    If kidemYili = 0 Then Exit Function
    'Doğum tarihi girilmezse yaş sınırına göre hesaplama yapılmaz.
    If dogumTarihi > 0 Then yasHesapla = True
    
    For j = 1 To kidemYili
        Eski = False  '10/06/2003 tarihi ve öncesi izin günü hesaplatma
        IzinGunu = 0
        
        TarihKontrol = DateAdd("YYYY", j, GTarihi)
        izinyili = Int(DateDiff("m", GTarihi, TarihKontrol) / 12)
        Yas = Int(DateDiff("m", dogumTarihi, TarihKontrol) / 12)
 
        'If TarihKontrol <= #10/6/2003# Then Eski = True
        If TarihKontrol <= "10 Haziran 2003" Then Eski = True
        If izinyili < 1 Then IzinGunu = 0
        If izinyili >= 1 Then If Eski Then IzinGunu = 12 Else IzinGunu = 14
        If izinyili >= 6 Then If Eski Then IzinGunu = 18 Else IzinGunu = 20
        If izinyili >= 15 Then If Eski Then IzinGunu = 24 Else IzinGunu = 26
        If yasHesapla Then
            If Yas <= 18 Or Yas >= 50 And IzinGunu < 20 Then IzinGunu = 20
        End If
        ToplamIzinGunu = ToplamIzinGunu + IzinGunu
    Next
End Function
(Yıllık izin işlemlerinde yıl üzerinden işlem yapılır. )
 
Üst