• DİKKAT

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

Kodda Revize / Kıdem Yılı

Katılım
29 Kasım 2007
Mesajlar
1,110
Excel Vers. ve Dili
excel 2007
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

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.
 
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.
 
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

  • Ekran Alıntısı.PNG
    Ekran Alıntısı.PNG
    45.3 KB · Görüntüleme: 5
İt function

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

...Then Exit Function olacak sanırım.
 
Yusuf Bey ilginize teşekkür ederim. Ama sorun devam ediyor.
 

Ekli dosyalar

  • suskun deneme.xlsm
    suskun deneme.xlsm
    53.8 KB · Görüntüleme: 8
  • Ek Açıklama 2020-07-07 074755.png
    Ek Açıklama 2020-07-07 074755.png
    153.5 KB · Görüntüleme: 3
Sayın suskun, #4 nolu mesajının en başında mcDateDif diye bir fonksiyon paylaşmış, o kodu dosyanıza eklememişsiniz.
 
Yusuf Bey
Function McDateDif(Tarih1 As Date, Tarih2 As Date, Optional Birim As String) As Long
şeklinde eklediğimde diğer kodları siliyor.
 
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.
 
Yusuf Bey eski kodlar Modül 2 yeni kodlar Modül 1 de ama yine hata veriyor.
 

Ekli dosyalar

Her iki modüldeki kodları da silin ve suskun beyin verdiği kodların hepsini bir modüle yapıştırın.
 
Yusuf Bey ilginize çok teşekkür ederim.
 
Geri
Üst