Kodda Revize / Kıdem Yılı

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
Kıdem yılını (K3 Hücresi) hesaplamaya çalıştığım bu örnekte personelin 3 Yılı 06.07.2020 Tarihinde dolacak şekilde yani 05.07.2020 tarihinde kıdem yılı 2 Yıl, 06.07.2020 tarihinde kıdem yılı 3 yıl olacak şekilde mevcut kodları düzeltme hususunda yardımlarınızı rica ediyorum.
 

Ekli dosyalar

askm

Destek Ekibi
Destek Ekibi
Katılım
4 Haziran 2005
Mesajlar
2,745
Excel Vers. ve Dili
2010-2016
If DateAdd("m", 1, t1) > Bit Then Exit Do satırını If DateAdd("m", 1, t1) >= Bit Then Exit Do olarak değiştirip deneyin.
 

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 askm ilginize çok teşekkür ederim.
 

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,
ETARİHLİ işlevini VBA da kullanmak için aşağıdaki kodu kullanabilirsiniz:
Kod:
Function McDateDif(Tarih1 As Date, Tarih2 As Date, Optional Birim As String) As Long
'Excel deki ETARİHLİ işlevi. Tarih1=Küçük Tarih Tarih2= Büyük Tarih
'Birim  Sonuç
'"Y" Dönem içindeki tam yıl sayısı.
'"M" Dönem içindeki tam ay sayısı.
'"D" Dönem içindeki tam gün sayısı.
'"MD" Başlangıç_tarihi ve bitiş_tarihi arasındaki gün sayısı olarak fark. Tarihlerdeki aylar ve yıllar dikkate alınmaz.
'Önemli : "MD" bağımsız değişkeninin bilinen sınırlamaları olduğundan, bu bağımsız değişkeni kullanmamanızı öneririz.
'"YM" Başlangıç_tarihi ve bitiş_tarihi arasındaki ay sayısı olarak fark. Tarihlerdeki günler ve yıllar dikkate alınmaz.
'"YD" Başlangıç_tarihi ve bitiş_tarihi günleri arasındaki fark. Tarihlerdeki yıllar dikkate alınmaz.
On Error GoTo HataVar
McDateDif = Evaluate("DATEDIF(" & CLng(Tarih1) & "," & CLng(Tarih2) & "," & Chr(34) & CStr(UCase(Birim)) & Chr(34) & ")") ' Hata verirse & yerine + kullanın
HataVar:
MyErrorHandler:
  If Err.Number = 2005 Then 'Exit Function
     MsgBox "Birinci Tarih ikini Tarhten Küçük olmalı."
  End If
  Exit Function
 
End Function
Yıllık izin hesaplamak için aşağıdaki kodu kullanabilirsiniz:
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
    KidemYili = McDateDif(GTarihi, izinTarihi, "Y")
     
    If KidemYili = 0 Then Ex
it Function
    
    If dogumtarihi > 0 Then YasHesapla = True
    
    For j = 1 To KidemYili
        
        TarihKontrol = DateAdd("YYYY", j, GTarihi)
        izinyili = McDateDif(GTarihi, TarihKontrol, "Y")
        Yas = McDateDif(dogumtarihi, TarihKontrol, "Y")
 
        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
Kıdem Yılı hesaplama için :
Kod:
Function Kıdemy(Bas As Date, Bit As Date) As Long
 
    Kıdemy = McDateDif(Bas, Bit, "Y")
 
End Function
Kıdem Yıl için hücrede
=McDateDif(Bas, Bit, "Y")
yada
=ETARİHLİ(Bas, Bit, "Y")
yada
=KıdemY(Bas, Bit)
Olarak herhangi birini kullanabilirsiniz.

Kolay gelsin.
 

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 Suskun Yıllık izni hesaplarken kullanmak için verdiğini kodda EK'te görüntüsünü verdiğim hatayı almaktayım. Bu hususta yardımlarınızı rica ediyorum.
 

Ekli dosyalar

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
İt function

satırı üstteki satırla birleşip

...Then Exit Function olacak sanırım.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Sayın suskun, #4 nolu mesajının en başında mcDateDif diye bir fonksiyon paylaşmış, o kodu dosyanıza eklememişsiniz.
 

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
Yusuf Bey
Function McDateDif(Tarih1 As Date, Tarih2 As Date, Optional Birim As String) As Long
şeklinde eklediğimde diğer kodları siliyor.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Silmesi için eski kodları seçip üstüne yapıştırmanız gerekir.

Eksik kodları kopyalayın, dosyanıza yeni modül ekleyin, kodları bu modüle yapıştırın.
 

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
Yusuf Bey eski kodlar Modül 2 yeni kodlar Modül 1 de ama yine hata veriyor.
 

Ekli dosyalar

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,084
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Her iki modüldeki kodları da silin ve suskun beyin verdiği kodların hepsini bir modüle yapıştırın.
 

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
Yusuf Bey ilginize çok teşekkür ederim.
 
Üst