CheckBox İle İzin Süresi Hesaplama

muygun

Özel Üye
Katılım
6 Temmuz 2004
Mesajlar
9,104
Excel Vers. ve Dili
Excel-2003 Türkçe
Syn ormann;

15 nolu mesaj ekinde 80 gün izin sadece pazar günlerini kapsıyor. (haliyle takvim yetmiyor)


Tablodan anladığım;
a)-tatil günleri izin gün sayısının dışında olacak.
b)-checkbox ile seçim yaptığınız günlerde izin gün sayısının dışında olacak.

Ekli dosyada Yusuf Bey'in kodlarınında eklendiği örneği deneyin.
İki koddan birini kullanın.
İyi çalışmalar.

Link:
http://dosya.co/h6ojzcs1fnsk/ormann-İZİN_SÜRESİ-2.zip.html
 

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
Sayın ormann, nedense 6 mayıs gününü pazar olmasına rağmen hesaba katmıyor. Nedendir bilemedim.

Sayın muygun, ilginize teşekkürler. Arkadaş, izninin son gününü bulmak istiyormuş, verdiğim kod ise ilk iş gününü buluyor.
 

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
Kodu aşağıdaki gibi değiştirip uyguladığımda A sütununa tatilleri, B sütununa izin günlerini yazıyor. Kontrol ettiğimde kodun

toplam = toplam +1

kısmının, nedense for next döngüsünde dikkate alınmadığını, döngünün sonlandırılacağı "toplam" değişkeninin arttırılmadığını anladım. Neden olduğunu çözemedim maalesef. döngü eklenen tatiller kadar arttırılması gerekirken, ilk belirlenen toplam değişkenine göre çalışıyor.

Kod:
Sub hesapla()
[A:B] = ""
toplam = [F7] + [F10] - 1
For i = [F7] To toplam
    If WorksheetFunction.CountIf(Range("I6:I100"), i) > 0 Then
        toplam = toplam + 1
        Range("A" & Cells(Rows.Count, "A").End(3).Row + 1) = i
    ElseIf WorksheetFunction.Index([M3:M15], WorksheetFunction.Weekday(i, 2) * 2 - 1) <> "" Then
        toplam = toplam + 1
        Range("A" & Cells(Rows.Count, "A").End(3).Row + 1) = i
    Else
        Range("B" & Cells(Rows.Count, "B").End(3).Row + 1) = i
    End If
Next i
[F13] = toplam
End Sub
 
Katılım
9 Ekim 2009
Mesajlar
1,626
Excel Vers. ve Dili
türkçe
2003
Sayın Muygun ve Sayın Yusuf bey çok teşekkür ederim. Sayın Muygun Son yapmış olduğunuz kod doğru tarihi hesaplıyor.Yusuf bey son göndermiş olduğunuz kod Muygun beyin kodundan farklı bir sonuç çıkarıyor.
Başlangıç Tarihini:01/01/2018
İzin Gün Sayısını:100
İzin Dışı Gün:pazar Tatil günü boş yazdığımda
Sayın Muygun'un Sonuç:26/04/2018
Sayın Ahmet Beyin sonuç:24/04/2018 gibi fark oluşuyor.
 

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 ormann, hatanın farkındayım, nedenini çözemiyorum.
 
Katılım
9 Ekim 2009
Mesajlar
1,626
Excel Vers. ve Dili
türkçe
2003
Ahmet bey izin süresi 36 gün yazıldığında doğru sonucu veriyor.Fakat bu sayıdan sonra yazıldığında Muygun beyin sonucundan farklı bir sonuç çıkarıyor.
 

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
Sanıyorum Do until döngüsüyle çözdüm olayı. ekli dosyayı inceleyiniz:
 

Ekli dosyalar

Katılım
9 Ekim 2009
Mesajlar
1,626
Excel Vers. ve Dili
türkçe
2003
Ahmet bey merhabalar;
Linki ekleyebilirmisiniz ?.Birde tarihleri A ve B sütünuna değilde r ve s sutunlarına atabilir mi?
 

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
[F13] = başla

yerine

[F13] = başla - 1

olmalı sanıyorum.
 

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
Kodu şöyle dener misiniz?

Kod:
Sub izinler()
[R2:S10000] = ""
toplam = [F7] + [F10] - 1
başla = [F7]
izin = 0
Do Until izin = [F10]
    
    If WorksheetFunction.CountIf(Range("I6:I100"), başla) > 0 Then
        Range("R" & Cells(Rows.Count, "R").End(3).Row + 1) = başla
        başla = başla + 1
    ElseIf WorksheetFunction.Index([M3:M15], WorksheetFunction.Weekday(başla, 2) * 2 - 1) <> "" Then
        Range("R" & Cells(Rows.Count, "R").End(3).Row + 1) = başla
        başla = başla + 1
    Else
        Range("S" & Cells(Rows.Count, "S").End(3).Row + 1) = başla
        başla = başla + 1
        izin = izin + 1
    End If
Loop
[F13] = başla - 1

Do Until WorksheetFunction.CountIf(Range("I6:I100"), başla) = 0 And _
         WorksheetFunction.Index([M3:M15], WorksheetFunction.Weekday(başla, 2) * 2 - 1) = ""
    
    başla = başla + 1
Loop

[F16] = başla


End Sub
 
Katılım
9 Ekim 2009
Mesajlar
1,626
Excel Vers. ve Dili
türkçe
2003
Yusuf bey ;
İzin Başlangıcı:30/12/2017
İzin Süresi:5 gün
İzin Bitişi Tarihi:05/01/2018
Göreve Başlama Tarihi:06/01/2018 olması gerekirken Cumartesi iş günü olduğu halde 07/01/2018 tarihine atıyor.Burda bir hata var gibi
 

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
Son gönderdiğim mesajdaki kodu, gönderdikten hemen sonra değiştirmiştim, tekrar kontrol eder misiniz?
 
Katılım
9 Ekim 2009
Mesajlar
1,626
Excel Vers. ve Dili
türkçe
2003
Yusuf bey çok teşekkür ederim.Ellerinize sağlık.Kod gayet güzel çalışıyor.Ayrıca sayın Muygun beye de teşekkürlerimi sunuyorum
 
Üst