• DİKKAT

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

Yıllık İzin Hesabı

Katılım
13 Mayıs 2005
Mesajlar
761
Excel Vers. ve Dili
2010 Türkçe
Kurumumuzda Geçici ve Daimi işçiler bulunmakta. Her ikisinin de yıllık izin hesaplama yöntemleri farklı.

Geçici işçilerin yıllık izin haketmesi için 1 yılda 179 gün çalışması gerekiyor. Eğer 1 yılda 179 günden fazla çalışma günü varsa geriye dönük çalışma toplamları 1801 günden az olanlar 12 gün fazla olanlar ise 18 gün izin haketmeli.

Daimi işçiler için bu durum her yıl tam çalıştıkları için ilk beş yıl (1801 gün) için 25 sonrası için 30 gün

Sorumu biraz daha sadeleştirdim. Uygun bir makro yazabilirseniz memnun olurum.
 

Ekli dosyalar

Aşağıdaki kodları deneyin

Kod:
Sub İzinHesapla()
    Dim Bak As Integer
    For Bak = 3 To Cells(Rows.Count, "E").End(3).Row + 1
        If Cells(Bak, "D").Value = "Daimi" Then
            If Cells(Bak, "I").Value < 1802 Then
                Cells(Bak, "K").Value = 25
            ElseIf Cells(Bak, "I").Value > 1801 Then
                Cells(Bak, "K").Value = 30
            End If
        ElseIf Cells(Bak, "D").Value = "Geçici" Then
            If Cells(Bak, "G").Value < 179 Then
                Cells(Bak, "K").Value = 0
            ElseIf Cells(Bak, "I").Value < 1802 Then
                Cells(Bak, "K").Value = 12
            ElseIf Cells(Bak, "I").Value > 1801 Then
                Cells(Bak, "K").Value = 18
            End If
        End If
    Next
End Sub
 
olmadı

Sayın dağlıkur makroyu sadece
(D=Geçici, Kadrolu H=Mevcut Yıl Çalışması ve I=Geçmiş Yıllar dahil olan çalışma) sütunlarına uyarlayabilir misiniz.

Formül çalışmadı yada ben uygulayamadım.
K= sütununa hak ettiği izini makro yazacak.

Teşekkürler
 
Kod:
Private Sub IzinHesapla()
    Dim Bak As Integer
    For Bak = 3 To Cells(Rows.Count, "E").End(3).Row + 1
        If Cells(Bak, "D").Value = "Kadrolu" Then
            If Cells(Bak, "I").Value < 1802 Then
                Cells(Bak, "K").Value = 25
            ElseIf Cells(Bak, "I").Value > 1801 Then
                Cells(Bak, "K").Value = 30
            End If
        ElseIf Cells(Bak, "D").Value = "Geçici" Then
            If Cells(Bak, "H").Value < 179 Then
                Cells(Bak, "K").Value = 0
            ElseIf Cells(Bak, "I").Value < 1802 Then
                Cells(Bak, "K").Value = 12
            ElseIf Cells(Bak, "I").Value > 1801 Then
                Cells(Bak, "K").Value = 18
            End If
        End If
    Next
End Sub
 
Özür

Sayın dağlıkur biliyorum ama ben bunu excel tablosundaki hücreye entegre edemedim. Hücrede formül çıkmıyor. Bi yerde hatamı yapıyorum anlamadım. Siz benim eklediğim tabloya eklermisiniz. Aklım drudu.
 
Siz bu işi formül ile mi yapmak istiyorsunuz?

Sorunuzu Makro veya VBA ile ilgili sorular bölümüne yazdığınız için çözümü kodlar ile yapmıştım. Sonuçta iş görüyor formül olması şart mı?
 
Formül ile yapmak isterseniz K3 hücresine aşağıdaki formülü yazıp aşağıya doğru kopyalayın

Kod:
=EĞER(D3="Kadrolu";EĞER(I3<1802;25;30);EĞER(D3="Geçici";EĞER(H3<180;0;EĞER(I3<1802;12;18));""))
 
Teşekkür ederim bu şekilde işimi gördü. Makro olsa daha hoş olurdu. Ama kafi elinize sağlık.
 
halit bey silememiştim konuyu. ama çok güzel bir çalışma yapmışsınız. Aslında elimdeki çalışmayı geliştirmem çok faydalı olur. İsterseniz yollarım fikir verebilirsiniz. Şu anda bu haliyle işimi görüyor. Takviye iyi gelebilir.
 

Ekli dosyalar

halit bey çalışan arkadaşlarımızın çoğu geçmiş yıllarda geçici çalışmış ve sonradan kadroya girmiş. Direk kadroya girenlerde var. bu durumları gözeterek bi çalışma yapmam gerekiyor. uzun zaman geçici çalışıp bazı yıllar izin haketmiş bazı yıllar hakkedememişler. Ayrıca 2009 yılından önce geçiciler için hakkediş süresi 190 günmüş. Artık ne kadar karışık olduğunu siz düşünün.
 
konuyu biraz daha irdelesek

ekteki dosyada halit hocanın makrosunu formülün içine yerleştirmeye çalıştım.

ancak eğer(ve.. istediğim cevabı alamadım göz atabilir misiniz.?
 

Ekli dosyalar

ekteki dosyada halit hocanın makrosunu formülün içine yerleştirmeye çalıştım.

ancak eğer(ve.. istediğim cevabı alamadım göz atabilir misiniz.?

Formülü bilmiyorum ama kullanıcı tanımlı forksiyonla aşağıdaki kodu denermisiniz.

Kod:
Function hakedis(isegiristarihi, dogumtarihi, kontrol_yili, gunun_tarihi)

If isegiristarihi = "" Then
hakedis = ""
Exit Function
ElseIf dogumtarihi = "" Then
hakedis = ""
Exit Function
ElseIf kontrol_yili = "" Then
hakedis = ""
Exit Function
ElseIf gunun_tarihi = "" Then
hakedis = ""
Exit Function
End If

zaman_aralıgı = CDate(Format(Format(isegiristarihi, "dd.mm.") & kontrol_yili, "dd.mm.yyyy"))
yer3 = CDate(zaman_aralıgı)
yer = Val((zaman_aralıgı - CDate(isegiristarihi)) * 1) + 1
yer1 = Val(Val(((zaman_aralıgı - CDate(dogumtarihi)) * 1) + 1) / 365.25)

If yer >= 365.25 Then
zaman_aralıgı = Val((yer / 365.25))
Else
zaman_aralıgı = 0
End If

If gunun_tarihi > yer3 Then
If isegiristarihi > 0 Then

If zaman_aralıgı <= 0 Then
hakedis = 0
ElseIf zaman_aralıgı >= 1 And zaman_aralıgı <= 5 Then
hakedis = 14
ElseIf zaman_aralıgı >= 6 And zaman_aralıgı <= 14 Then
hakedis = 20
ElseIf zaman_aralıgı >= 15 And zaman_aralıgı <= 65 Then
hakedis = 26
End If

If zaman_aralıgı > 0 Then
If hakedis <= 14 Then
If yer1 <= 18 Then
hakedis = 20
ElseIf yer1 >= 50 Then

If hakedis < 20 Then
hakedis = 20
End If

End If
End If
End If
End If

Else
hakedis = ""
End If

End Function
 

Ekli dosyalar

Geri
Üst