• DİKKAT

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

Tarih aralığındaki bir aya ait çalışılan mesai günlerini saymak.

  • Konbuyu başlatan Konbuyu başlatan Kardiyak
  • Başlangıç tarihi Başlangıç tarihi

Kardiyak

Altın Üye
Katılım
25 Aralık 2008
Mesajlar
60
Excel Vers. ve Dili
2010 türkçe
oElBjR.png


İçinden çıkamadığım bir konu bu:

B18 ve b18+B20 ay sonrası tarih aralığında, B16 daki seçilen ay içinde kaç günü aktif çalışılmış mesai günüdür.


Kod:
sub deneme()
aysn = range("b20")
ekbaşlangıç = range("b18")
ekson = DateAdd("m", 6, ekbaşlangıç - 1)
süre = ekson-ekbaşlangıç
sn=1
for i=3 to 14 [COLOR="seaGreen"]'izinli olduğu tarihlerden seçili aya ait olanları listeleme.[/COLOR]
 for s=0 to range("F"&i)
   if aysn = month(range("E" & i) + s) then range("g" & sn)= range("E"&i)+s
   sn =sn+1
 next s
next i

for b=0 to süre
 tgün= ekbaşlangıç+b
 if not month(tgün) = aysn Then goto atla
 If Weekday(tgün, vbMonday) > 5 Then goto atla
 for ib = 1 to sn [COLOR="SeaGreen"]'günü izinli günler listesinde ara[/COLOR]
   if tgün = range("g" & ib ) Then goto atla
 next ib
 for it = 2 to 14 [COLOR="SeaGreen"]'günü tam gün resmi tatiller listesinde ara[/COLOR]
   if tgün = range("a" & it ) Then goto atla
 next it
 for iy = 2 to 14 [COLOR="SeaGreen"]'günü yarım gün tatiller listesinde ara[/COLOR]
   if tgün = range("b" & iy ) Then goto atla
 next iy
say = say+1
atla:
next b

range("b23") = say

end sub

Gibisinden bir kod hazırladım fakat sonucu 22 gibi hatalı bir sonuç buluyor.
Hata nerede ve Bunu yapmanın daha kolay bir yolu var mı?
yani izinli günleri listeletmeden direk makro içinde hesaplama gibi. (resmi tatiller tablosu sayfada kalacak)
ayrıca yıl kontrolü de yapmak gerekecek. B15 te yıl seçilmiş varsayarsak.

yardımcı olabileceklere şimdiden teşekkürler.
 
kodu şu şekilde düzelttim. Artık hata vermeden çalışıyor. Sonucu doğru olarak 15 diye buldu.
Ama yine de daha farklı ve basit yapılabilir diyen önerileri bekliyorum.

Kod:
Sub deneme()
Dim süre As Integer
Dim ekbaşlangıç, ekson, tgün As Date
aysn = Range("b16")
ayek = Range("b20")
ekbaşlangıç = Range("b18")
ekson = DateAdd("m", ayek, ekbaşlangıç - 1)
süre = CDate(ekson) - CDate(ekbaşlangıç)
sn = 1

For i = 3 To 14[COLOR="YellowGreen"] 'izinli olduğu tarihlerden seçili aya ait olanları listeleme.[/COLOR]
    For s = 0 To Range("F" & i)
        If Range("E" & i) = "" Then GoTo atla
        If aysn = Month(Range("E" & i) + s) Then
            Range("G" & sn) = Range("E" & i) + s
            sn = sn + 1
        End If
    Next s
Next i
atla:

For x = 0 To süre
    tgün = ekbaşlangıç + x
    If Not Month(tgün) = aysn Then GoTo atla1
    If Weekday(tgün, vbMonday) > 5 Then GoTo atla1
 
    For ib = 1 To sn [COLOR="YellowGreen"]'günü izinli günler listesinde ara[/COLOR]
        If tgün = Range("g" & ib) Then GoTo atla1
    Next ib
 
    For it = 2 To 14 [COLOR="YellowGreen"]'günü tam gün resmi tatiller listesinde ara[/COLOR]
        If tgün = Range("a" & it) Then GoTo atla1
    Next it
 
    For iy = 2 To 14[COLOR="YellowGreen"] 'günü yarım gün tatiller listesinde ara[/COLOR]
        If tgün = Range("b" & iy) Then GoTo atla1
    Next iy
    
    say = say + 1
atla1:
Next x

Range("b23") = say

End Sub
 
Geri
Üst