• DİKKAT

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

Formül yazımı ve calendarform ile tatil günleri (izin çizelgesi)

Hakan Ertürk

Altın Üye
Katılım
23 Haziran 2016
Mesajlar
66
Excel Vers. ve Dili
Ofis 2016 TR 64 Bit
Merhabalar,

Lisanslı MS Office 2016 kullanıcısıyım.

Şöyle bir sorum var, yapılıyor mu mümkün mü hiç bir fikrim yok ancak mantıken bir şeylerin olabileceği kanısındayım ve işin içinden çıkamadım.

_________A________B________C________D________E________F________G
1.............14.........10 Gün...20.06.2016...23.06.2016.....4
2

Formül şöyle ki, E=D1-C1+1 buradaki +1 olmazsa 23-20 3 olarak gösteriyor ancak izine çıkıldığında o günkü tarihte baz alındığından 4 gün izin almış olunuyor.

B=A-E bu formülde direk doğru sonuç çıkıyor.

Ancak C ve D sütununda yer alan tarihler yazmadığında,

_________A________B________C________D________E________F________G
1.............14.........13 Gün............................................1
2

haliyle +1 dediğimiz için otomatik olarak 1 kalıyor, bu sayı da diğer formülle bağıntılı olduğu için izin sayısını bir düşürüyor.

İstediğim formül şu;

Eğer C ve D sütununda değer yok ise E 0 olsun var ise +1 eklesin.

Umarım anlatabilmişimdir. :)

Yardımlarınız için şimdiden teşekkür ederim.

Sevgi ve saygılarımla.
Hakan Ertürk
 
Son düzenleme:
Deneyiniz.

Kod:
=EĞER(VE(C1="";D1="");D1-C1;D1-C1+1)
 
Sayın @Korhan Ayhan, teşekkürlerimi sunarım.

Bir şey daha rica etsem. Günlük izinlerde haliyle örnek tarih olarak; 24.06.2016 24.06.2016 iki tarih eşit olduğunda 1 gün izin düşmesi gerek aynı formül içinde bunu kullanabilir miyiz?
 
Son düzenleme:
Deneyiniz.

Kod:
=EĞER(YADA(C1="";D1="");0;EĞER(VE(C1="";D1="");D1-C1;EĞER(VE(C1>0;D1>0;C1=D1);1;D1-C1+1)))
 
Bu işlev için çok fazla değişken değer girdiniz diye uyarı vermekte.

Yazdığınız ilk formülü tekrar denedim bu sefer oldu. Yani aynı gün tarihli olunca 1 gün eksildi.

=EĞER(VE(C1="";D1="");D1-C1;D1-C1+1)

Cevabınızı görmeden önce şöyle bir formül ile uğraşıyordum.
=EĞER(VE(D1<>"";C1<>"");D1-C1;"")& "0"

D de veya C de değer yoksa hiç bir işlem yapmıyor (d ye veya c ye değer yazıldığında e de karışık rakamlar çıkmasını engellemek için, oysa bu formülü ilerletemedim sizin verdiğiniz formüle bu durum eklenebilir mi?

(umarım kafa karıştırmamışımdır :( )
 
Sanırım biraz ilerlettim;

=EĞER(VE(C3<>"";D3<>"");D3-C3+1;"")

Eğer C de ve D de değer varsa yukarıdaki formül tamam, ancak C de ve D de değer yoksa E yi okuyamadığından, B de #değer! hatası veriyor :(

E ye
=EĞER(VE(C3<>"";D3<>"");D3-C3+1;"")& "0" yazdırırsam bu sefer kalıcı oluyor tarih eklendiğinde 0 yanına kaç gün ise o sayı geliyor 10 veya 00 gibi
 
=EĞER(C1=0;0;EĞER(D1=0;0;D1-C1+1))

ve sanırım tamam dır. :)

değerli yardımlarınız için teşekkür ederim. yukarıdaki formül bana ileride sorun yaratır mı sadece bunu merak ediyorum.

İlginize çok teşekkürler.
 
konuya ortadan müdahale etmek istemem ama,
Sn Korhan Ayhan 'ın önerdiği formül NORMAL durumlar için geçerli bir formüldür.
Ama ANORMAL durumlar (yani hata sonucu oluşan durumlar demek daha doğru olur)
1 - C1 ve ya D1 den herhangi birinde Tarih var ve diğeri BOŞ
2 - D1 deki tarih değeri C1 den küçük ( normalde izin dönüş tarihi , izin başlangıç tarihinden büyük olmalı...)

Bu anormallikler göz önüne alındığında , ki tüm bu anormallik durumunda 0 değerini vermeli dersek

Kod:
=EĞER(YADA(C1="";D1="";D1<C1);0;D1-C1+1)

formülü kullanılabilir..
 
Merhaba Sayın @sakman26, ilginize çok teşekkür ederim.

Önerdiğiniz formül daha mantıklı geldi, netice de tarih yanlış yazılabilir. Küçük dahi olsa 0 olması bir hata yapıldığını gösterecektir. Böylelikle hata fark edilecek.

Değerli yardımlarınız için tekrar teşekkür ederim.

Hayırlı sahurlar.
 
Günaydınlar,

Forumda biraz arama yaptım ancak kullandığım form için aradığım sonuca ulaşamadım.

Şöyle ki;
24.06.2016 - 28.06.2016 olması gereken değer 5 gün

Ancak arada 1 Pazar günü var bu durumda mantıken 4 olması gerek.

Kullandığım calendarfrm kodları aşağıdaki gibi ve hafta başını da Pazar olarak seçiyor.

Hafta başının Pazartesi olması ve Pazar günlerini tatilden saydırılması mümkün müdür?

Yoksa başka bir yol mu izlemem gerekiyor?

İlginize teşekkür ederim.

Kod:
Option Explicit
    Dim ThisDay As Date
    Dim ThisYear, ThisMth As Date
    Dim CreateCal As Boolean
    Dim i As Integer

Private Sub HelpLabel_Click()

End Sub

Private Sub Label2_Click()

End Sub

Private Sub UserForm_Initialize()
    Application.EnableEvents = False
    'starts the form on todays date
    ThisDay = Date
    ThisMth = Format(ThisDay, "mm")
    ThisYear = Format(ThisDay, "yyyy")
    For i = 1 To 12
        CB_Mth.AddItem Format(DateSerial(Year(Date), Month(Date) + i, 0), "mmmm")
    Next
    CB_Mth.ListIndex = Format(Date, "mm") - Format(Date, "mm")
    For i = -20 To 50
        If i = 1 Then CB_Yr.AddItem Format((ThisDay), "yyyy") Else CB_Yr.AddItem _
            Format((DateAdd("yyyy", (i - 1), ThisDay)), "yyyy")
    Next
    CB_Yr.ListIndex = 21
    'Builds the calendar with todays date
    CalendarFrm.Width = CalendarFrm.Width
    CreateCal = True
    Call Build_Calendar
    Application.EnableEvents = True
End Sub
Private Sub CB_Mth_Change()
    'rebuilds the calendar when the month is changed by the user
    Build_Calendar
End Sub
Private Sub CB_Yr_Change()
    'rebuilds the calendar when the year is changed by the user
    Build_Calendar
End Sub
Private Sub Build_Calendar()
    'the routine that actually builds the calendar each time
    If CreateCal = True Then
    CalendarFrm.Caption = " " & CB_Mth.Value & " " & CB_Yr.Value
    'sets the focus for the todays date button
    CommandButton1.SetFocus
    For i = 1 To 42
        If i < Weekday((CB_Mth.Value) & "/1/" & (CB_Yr.Value)) Then
            Controls("D" & (i)).Caption = Format(DateAdd("d", (i - Weekday((CB_Mth.Value) & "/1/" & (CB_Yr.Value))), _
                ((CB_Mth.Value) & "/1/" & (CB_Yr.Value))), "d")
            Controls("D" & (i)).ControlTipText = Format(DateAdd("d", (i - Weekday((CB_Mth.Value) & "/1/" & (CB_Yr.Value))), _
                ((CB_Mth.Value) & "/1/" & (CB_Yr.Value))), "dd/mm/yyyy")
        ElseIf i >= Weekday((CB_Mth.Value) & "/1/" & (CB_Yr.Value)) Then
            Controls("D" & (i)).Caption = Format(DateAdd("d", (i - Weekday((CB_Mth.Value) _
                & "/1/" & (CB_Yr.Value))), ((CB_Mth.Value) & "/1/" & (CB_Yr.Value))), "d")
            Controls("D" & (i)).ControlTipText = Format(DateAdd("d", (i - Weekday((CB_Mth.Value) & "/1/" & (CB_Yr.Value))), _
                ((CB_Mth.Value) & "/1/" & (CB_Yr.Value))), "dd/mm/yyyy")
        End If
        If Format(DateAdd("d", (i - Weekday((CB_Mth.Value) & "/1/" & (CB_Yr.Value))), _
        ((CB_Mth.Value) & "/1/" & (CB_Yr.Value))), "mmmm") = ((CB_Mth.Value)) Then
            If Controls("D" & (i)).BackColor <> &H80000016 Then Controls("D" & (i)).BackColor = &H80000018  '&H80000010
            Controls("D" & (i)).Font.Bold = True
        If Format(DateAdd("d", (i - Weekday((CB_Mth.Value) & "/1/" & (CB_Yr.Value))), _
            ((CB_Mth.Value) & "/1/" & (CB_Yr.Value))), "dd/mm/yyyy") = Format(ThisDay, "dd/mm/yyyy") Then Controls("D" & (i)).SetFocus
        Else
            If Controls("D" & (i)).BackColor <> &H80000016 Then Controls("D" & (i)).BackColor = &H8000000F
            Controls("D" & (i)).Font.Bold = False
        End If
    Next
    End If
End Sub
Private Sub D1_Click()
    'this sub and the ones following represent the buttons for days on the form
    'retrieves the current value of the individual controltiptext and
    'places it in the active cell
    ActiveCell.Value = D1.ControlTipText
    Unload Me
    'after unload you can call a different userform to continue data entry
    'uncomment this line and add a userform named UserForm2
    'Userform2.Show
    
End Sub
Private Sub D2_Click()
    ActiveCell.Value = D2.ControlTipText
    Unload Me
    
End Sub
Private Sub D3_Click()
    ActiveCell.Value = D3.ControlTipText
    Unload Me
    
End Sub
Private Sub D4_Click()
    ActiveCell.Value = D4.ControlTipText
    Unload Me
    
End Sub
Private Sub D5_Click()
    ActiveCell.Value = D5.ControlTipText
    Unload Me
    
End Sub
Private Sub D6_Click()
    ActiveCell.Value = D6.ControlTipText
    Unload Me
    
End Sub
Private Sub D7_Click()
    ActiveCell.Value = D7.ControlTipText
    Unload Me
    
End Sub
Private Sub D8_Click()
    ActiveCell.Value = D8.ControlTipText
    Unload Me
    
End Sub
Private Sub D9_Click()
    ActiveCell.Value = D9.ControlTipText
    Unload Me
    
End Sub
Private Sub D10_Click()
    ActiveCell.Value = D10.ControlTipText
    Unload Me
    
End Sub
Private Sub D11_Click()
    ActiveCell.Value = D11.ControlTipText
    Unload Me
    
End Sub
Private Sub D12_Click()
    ActiveCell.Value = D12.ControlTipText
    Unload Me
    
End Sub
Private Sub D13_Click()
    ActiveCell.Value = D13.ControlTipText
    Unload Me
    
End Sub
Private Sub D14_Click()
    ActiveCell.Value = D14.ControlTipText
    Unload Me
    
End Sub
Private Sub D15_Click()
    ActiveCell.Value = D15.ControlTipText
    Unload Me
    
End Sub
Private Sub D16_Click()
    ActiveCell.Value = D16.ControlTipText
    Unload Me
    
End Sub
Private Sub D17_Click()
    ActiveCell.Value = D17.ControlTipText
    Unload Me
    
End Sub
Private Sub D18_Click()
    ActiveCell.Value = D18.ControlTipText
    Unload Me
    
End Sub
Private Sub D19_Click()
    ActiveCell.Value = D19.ControlTipText
    Unload Me
    
End Sub
Private Sub D20_Click()
    ActiveCell.Value = D20.ControlTipText
    Unload Me
    
End Sub
Private Sub D21_Click()
    ActiveCell.Value = D21.ControlTipText
    Unload Me
    
End Sub
Private Sub D22_Click()
    ActiveCell.Value = D22.ControlTipText
    Unload Me
    
End Sub
Private Sub D23_Click()
    ActiveCell.Value = D23.ControlTipText
    Unload Me
    
End Sub
Private Sub D24_Click()
    ActiveCell.Value = D24.ControlTipText
    Unload Me
    
End Sub
Private Sub D25_Click()
    ActiveCell.Value = D25.ControlTipText
    Unload Me
    
End Sub
Private Sub D26_Click()
    ActiveCell.Value = D26.ControlTipText
    Unload Me
    
End Sub
Private Sub D27_Click()
    ActiveCell.Value = D27.ControlTipText
    Unload Me
    
End Sub
Private Sub D28_Click()
    ActiveCell.Value = D28.ControlTipText
    Unload Me
    
End Sub
Private Sub D29_Click()
    ActiveCell.Value = D29.ControlTipText
    Unload Me
    
End Sub
Private Sub D30_Click()
    ActiveCell.Value = D30.ControlTipText
    Unload Me
    
End Sub
Private Sub D31_Click()
    ActiveCell.Value = D31.ControlTipText
    Unload Me
    
End Sub
Private Sub D32_Click()
    ActiveCell.Value = D32.ControlTipText
    Unload Me
    
End Sub
Private Sub D33_Click()
    ActiveCell.Value = D33.ControlTipText
    Unload Me
    
End Sub
Private Sub D34_Click()
    ActiveCell.Value = D34.ControlTipText
    Unload Me
    
End Sub
Private Sub D35_Click()
    ActiveCell.Value = D35.ControlTipText
    Unload Me
    
End Sub
Private Sub D36_Click()
    ActiveCell.Value = D36.ControlTipText
    Unload Me
    
End Sub
Private Sub D37_Click()
    ActiveCell.Value = D37.ControlTipText
    Unload Me
    
End Sub
Private Sub D38_Click()
    ActiveCell.Value = D38.ControlTipText
    Unload Me
    
End Sub
Private Sub D39_Click()
    ActiveCell.Value = D39.ControlTipText
    Unload Me
    
End Sub
Private Sub D40_Click()
    ActiveCell.Value = D40.ControlTipText
    Unload Me
    
End Sub
Private Sub D41_Click()
    ActiveCell.Value = D41.ControlTipText
    Unload Me
    
End Sub
Private Sub D42_Click()
    ActiveCell.Value = D42.ControlTipText
    Unload Me
    
End Sub
 
Biraz daha araştırma yaparak biraz da yardım alarak sonuca vardım.

asdadas.jpg


Şimdi tek kalan Pazar günlerini izinden düşürmemek. Bu konu hakkında ipucu dahi alabilsem çok makbule geçecek. En azından nerelerde araştırma yapacağımı keşfediyorum.

İlginize teşekkür ederim.
 
Pazar günleri ni izinde saymayalım diyorsunuz...Ve daha sonra da Bayramları da saymayalım diyeceksiniz. Bu nedenle İŞGÜNÜ.ULUSL ve TAMİŞGÜNÜ.ULUSL fonksiyonunu incelemenizi öneririm. 2007 versiyon kullandığım için bu fonksiyonlar bende maalesef bulunmuyor.
bildiğim kadarıyla TAMİŞGÜNÜ.ULUSL fonksiyonu yazılışı (söz dizimi)
TAMİŞGÜNÜ.ULUSL(başlangıç_tarihi, bitiş_tarihi, [hafta sonu], [tatiller])
fonksiyonu incelediğinizde, haftasonu için günlere göre değerler var. yanlış hatırlamıyorsam eğer sadece pazar günü seçimi için 11 değeri girmek gerekiyor. Diğer tarafta da yıla göre bayramların (tatillerin) listesi olur. bayramlar da buradan alınır.
Fonksiyonu incelediğinizde daha iyi kavrayacağınızdan eminim.
kolay gelsin..
 
Sayın @sakman26, çok teşekkür ederim. Yönlendirmeniz bile benim için yeterli en azından hangi kod için araştırma yağacağım kavramış oluyorum.

Bir konuda sorun oluştu. Sanırım hafta gününü Pazartesi yaptıktan sonra bu hatayı aldım ve yeni fark ettim.

Örnek;
30.06.2016 - 01.07.2016 tarihi için 2 gün yazması gerek ancak ay atladığından hiç bir işlem yapmıyor. Bu konu hakkında yardım alabilir miyim?

İlginize teşekkür ederim.
 
siz makro kullanarak mı sonuç alıyorsunuz.
yoksa makroyu sadece takvimden gün seçmek için mi kullanıyorsunuz.
Makro bilgim VBA olarak maalesef yok denecek kadar diyebilirim.
Ama iki tarih arasındaki fark , (TAMİŞGÜNÜ , İŞGÜNÜ gibi fonksiyon kullanılmadıkça(yani haftasonu parametresi Pazartesi , Cumartesi vb gibi seçilmedikçe ) normal çıkacaktır. Yani 01.07.2016 - 30.06.2016 dediğinizde fark : 1 olacaktır. dünkü mesajlara bakarsanız +1 değeri var. Yani hem 30.06 ve hem de 01.07 o zaman fark : 2 olacaktır.
 
ilginize teşekkürler, lakin çok abartılı bir şey yapmıyorum, her sene yenilecek olan personel izin çizelgesi gibi bir şey bu yüzden VBA olarak kullandığım calendar formu excel e yazdırıyorum.

adasd.jpg


Sonuç resimde görüldüğü gibi.
 
Son düzenleme:
resme göre J2 hücresinde formül mü var?
Formül varsa nedir?
eğer dün denilen
=EĞER(YADA(H2="";I2="";I2<H2);0;I2-H2+1)
şeklinde formül varsa sonuç 2 çıkacaktır. Sizde ise 0..
mümkünde dosya.tc upload sitesi ile resimdeki örnek olan sayfayı yükleyin. Bir bakalım.
 
Sayın @sakman26, evet J2 de dün sizlerin yardımı ile yazılan formül var. Bu formül üzerinde < > değişikliği yaparak çözüme kavuşmuş bulunmaktayım.

İlginize çok teşekkür ederim.

Kod:
=EĞER(YADA(H2="";I2="";I2[B][COLOR="Red"]<[/COLOR][/B]H2);0;I2-H2+1)
Kod:
=EĞER(YADA(H2="";I2="";I2[B][COLOR="Red"]>[/COLOR][/B]H2);0;I2-H2+1)

adas.jpg
 
Uyuyamayacağım bu gece :( tam yattım başka tarih deneyeyim dedim şöyle ki;

adasd-[493921].jpg


formülde < > olarak değiştirdim bu sefer normal tarihler saymıyor.

=EĞER(YADA(H2="";I2="";I2<H2);0;I2-H2+1)
=EĞER(YADA(H2="";I2="";I2>H2);0;I2-H2+1)

bu iki formülü birleştirmeyi denedim sürekli dizi hatası aldım < > yazdırmasam bu sefer ilk tarih eklendiğinde sonuçta 42523 gibi karışık rakamlar çıkıyor. var mıdır başka çözümü acep.

İlginize teşekkürler.
 
Son düzenleme:
Geri
Üst