• DİKKAT

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

Yıllık İzin Dönüş Tarihi Hesaplama

Katılım
21 Kasım 2008
Mesajlar
113
Excel Vers. ve Dili
EXCEL2000
Selam Arkadaşlar

Benim Sorunum hazırlamış olduğum tabloda yıllık izin kullananların dönüş tarihlerini (Pazar ve resmi tatilleri dikkate alarak hesaplaması)
Mesela A1 hücresine izin başlangıç tarihini(28.12.2015) B1 Hücresine Yıllık İzin Hakkı (20 iş günü) C3 hücresine de izinden dönüş tarihini ne zaman olacağını hesaplaması ama burda önemli olan izin dönüş tarihini hesaplarken pazarları ve resmi tatilleri dikkate alarak hesaplaması Formül sonucunun 21.01.2016 olması gerekiyor. İlginize şimdiden teşekkürler.
 
Merhaba dosyayı inceleyiniz.
İyi çalışmalar.
 

Ekli dosyalar

Öncelikle ilginiz için çok teşekkür ederim.

Ama ben dosyayı açamıyorum. Altın Üyelik İstiyor. Bu dosyayı görememin başka yolu yokmu
 


Sayın Dantex

Sizi yordum sorun çözülüyor ama vaktiniz varsa birşey daha sormak istiyorum şimdi benim oluşmuş bir izin tablom var ve burdaki çalışan sayısı 450 civarında yeni bir tablo oluşturmadan bu uygulamayı izin tabloma formüllerle aktarmam mümkün mü yani başka bir dosyaya bilgi girişi yapmadan benim orjinal dosyamda bu uygulamayı aktifleştirebilirmiyiz
 
Siz bir örnek dosya ekleyin. Kullanıcı tanımlı fonksiyon yapabiliriz.
 
Sayın dentex çevrimdışı durumda.
Dosya ekleme ile ilgili cevap vermek istedim.

Örnek belgenizi burası veya burası gibi pir paylaşım sitesine yükleyip,
oradan alacağınız erişim bağlantı adresini burada paylaşabilirsiniz.
 
Merhaba,bir üstteki mesajda Ömer BARAN arkadaşımızın verdiği 2. linke tıklarsan yükleyebilirsin.
 
Alternatif kod:
Kodun çalışması için iki sayfa olması lazım dosyanızda birinci sayfa (bayramlar) ikinci sayfa (data)

Bayramlar sayfasına A sütununa Dini bayram tatilleri günleri (tarih formatında) ve haftanın tatil günleri (Pazar) gibi yazılır.
A sütünü (A2 den başlıyor)

16.07.2015
17.07.2015
18.07.2015
19.07.2015
23.09.2015
24.09.2015
25.09.2015
26.09.2015
27.09.2015
04.07.2016
05.07.2016
06.07.2016
07.07.2016
11.09.2016
12.09.2016
13.09.2016
14.09.2016
15.09.2016
Pazar
Cumartesi


data sayfasına A sütununa izin tarihleri yazılır B sütununna Kullanacağı izin yazin yazılır ve kod çalıştırılır.

A sütunu (A2 den başlıyor)

01.09.2015
28.12.2015
28.12.2015
01.01.2015
15.03.2015
30.04.2015
14.05.2015
20.06.2015
03.07.2015
05.08.2015
10.10.2015
16.11.2015


B sütunu (B2 den başlıyor)

30
20
5
20
30
15
12
16
18
6
25
40
kod:

Kod:
Option Explicit

Sub deneme()

Dim i, r, j, sut1, son3, deg, say
Dim tarih1, gün1
Dim data1, data2
sut1 = 1

Dim ZBasla, zaman, zBitis
ZBasla = TimeValue(Now)
zaman = Timer
Application.Calculation = xlManual


For j = 2 To Worksheets("data").Cells(Rows.Count, "a").End(3).Row
say = 0

tarih1 = Worksheets("data").Cells(j, 1)
If IsDate(tarih1) = False Then
MsgBox "Tarih boş"
GoTo Atla2
Exit For

End If

gün1 = Worksheets("data").Cells(j, 2)

If IsNumeric(gün1) = False Then
MsgBox "Gün boş"
GoTo Atla2
Exit For
End If

Dim m As Date
son3 = 0

data1 = CDate(tarih1)
data2 = Val(gün1)
deg = 0
For i = 0 To 500
If son3 > data2 Then Exit For
m = data1 + i

For r = 2 To Worksheets("bayramlar").Cells(Rows.Count, "a").End(3).Row

If m = Sheets("bayramlar").Cells(r, 1).Value Then
say = say + 1
GoTo Atla1
Exit For
End If

If Format((m), "dddd") = Sheets("bayramlar").Cells(r, 1).Value Then
say = say + 1
GoTo Atla1
Exit For
End If

Next r

If "01.01" = Format((m), "dd/mm") Or "23.04" = Format((m), "dd/mm") _
Or "01.05" = Format((m), "dd/mm") Or "19.05" = Format((m), "dd/mm") _
Or "30.08" = Format((m), "dd/mm") Or "28.10" = Format((m), "dd/mm") _
Or "29.10" = Format((m), "dd/mm") Then
say = say + 1
GoTo Atla1
End If

deg = CDate((m))
son3 = son3 + 1

Atla1:
Next i
Worksheets("data").Cells(j, 3).Value = deg
Worksheets("data").Cells(j, 4).Value = i - 1
Worksheets("data").Cells(j, 5).Value = say
Atla2:
Next j
Application.Calculation = xlAutomatic
zBitis = TimeValue(Now)

MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & _
"İşlem süresi ; " & Format(Timer - zaman, "0.00") & Chr(10) & _
"Geçen Süre " & CDate(zBitis - ZBasla), vbInformation, " Sonuç Penceresi"
End Sub
 

Ekli dosyalar

Alternatif kod:
Kodun çalışması için iki sayfa olması lazım dosyanızda birinci sayfa (bayramlar) ikinci sayfa (data)

Bayramlar sayfasına A sütununa Dini bayram tatilleri günleri (tarih formatında) ve haftanın tatil günleri (Pazar) gibi yazılır.
A sütünü (A2 den başlıyor)

16.07.2015
17.07.2015
18.07.2015
19.07.2015
23.09.2015
24.09.2015
25.09.2015
26.09.2015
27.09.2015
04.07.2016
05.07.2016
06.07.2016
07.07.2016
11.09.2016
12.09.2016
13.09.2016
14.09.2016
15.09.2016
Pazar
Cumartesi


data sayfasına A sütununa izin tarihleri yazılır B sütununna Kullanacağı izin yazin yazılır ve kod çalıştırılır.

A sütunu (A2 den başlıyor)

01.09.2015
28.12.2015
28.12.2015
01.01.2015
15.03.2015
30.04.2015
14.05.2015
20.06.2015
03.07.2015
05.08.2015
10.10.2015
16.11.2015


B sütunu (B2 den başlıyor)

30
20
5
20
30
15
12
16
18
6
25
40
kod:

Kod:
Option Explicit

Sub deneme()

Dim i, r, j, sut1, son3, deg, say
Dim tarih1, gün1
Dim data1, data2
sut1 = 1

Dim ZBasla, zaman, zBitis
ZBasla = TimeValue(Now)
zaman = Timer
Application.Calculation = xlManual


For j = 2 To Worksheets("data").Cells(Rows.Count, "a").End(3).Row
say = 0

tarih1 = Worksheets("data").Cells(j, 1)
If IsDate(tarih1) = False Then
MsgBox "Tarih boş"
GoTo Atla2
Exit For

End If

gün1 = Worksheets("data").Cells(j, 2)

If IsNumeric(gün1) = False Then
MsgBox "Gün boş"
GoTo Atla2
Exit For
End If

Dim m As Date
son3 = 0

data1 = CDate(tarih1)
data2 = Val(gün1)
deg = 0
For i = 0 To 500
If son3 > data2 Then Exit For
m = data1 + i

For r = 2 To Worksheets("bayramlar").Cells(Rows.Count, "a").End(3).Row

If m = Sheets("bayramlar").Cells(r, 1).Value Then
say = say + 1
GoTo Atla1
Exit For
End If

If Format((m), "dddd") = Sheets("bayramlar").Cells(r, 1).Value Then
say = say + 1
GoTo Atla1
Exit For
End If

Next r

If "01.01" = Format((m), "dd/mm") Or "23.04" = Format((m), "dd/mm") _
Or "01.05" = Format((m), "dd/mm") Or "19.05" = Format((m), "dd/mm") _
Or "30.08" = Format((m), "dd/mm") Or "28.10" = Format((m), "dd/mm") _
Or "29.10" = Format((m), "dd/mm") Then
say = say + 1
GoTo Atla1
End If

deg = CDate((m))
son3 = son3 + 1

Atla1:
Next i
Worksheets("data").Cells(j, 3).Value = deg
Worksheets("data").Cells(j, 4).Value = i - 1
Worksheets("data").Cells(j, 5).Value = say
Atla2:
Next j
Application.Calculation = xlAutomatic
zBitis = TimeValue(Now)

MsgBox "İşleminiz tamamlanmıştır." & Chr(10) & _
"İşlem süresi ; " & Format(Timer - zaman, "0.00") & Chr(10) & _
"Geçen Süre " & CDate(zBitis - ZBasla), vbInformation, " Sonuç Penceresi"
End Sub



Sayın Halit3

Dosya linkini ekleyebilirmisiniz? Bilginin zararı olmaz. Sizde zaman ve emek harcamışsınız. Sonsuz teşekkürler
 
Geri
Üst