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