Function ile ilgili

Katılım
1 Haziran 2005
Mesajlar
105
Excel Vers. ve Dili
Excel 2003-Türkçe
Merhabalar,

Aşağıdaki functionda kidem(a1;b1) şeklinde hesaplama yaptırıyoruz.
a1 = başlangıç_tarihi
b1 = son_tarih bilgileri var.
bunu kidem(A1;IV1) olacak şekilde yapabilirmiyiz.
sütunlar başlangıç tarihinden başlıyor bir başlangıç bir son tarih bir başlangıç bir son bu böyle devam ediyor.
yani ben bir aralıkta başlangıç tarihi ile son tarih arası seçtiğimde 2 li 2 li bunları hesaplıyacak.


Function Kidem(Başlangıç_Tarihi, Son_Tarih)

a = Başlangıç_Tarihi
b = Son_Tarih

If Not IsDate(a) Then
Kidem = 0
Exit Function
End If

If Not IsDate(b) Then
b = Format(Now, "dd.mm.yyyy")
Else
If IsDate(b) Then b = Son_Tarih
End If

a1 = Int(Left$(a, 2))
a2 = Int(Mid(a, 4, 2))
a3 = Int(Right$(a, 4))

b1 = Int(Left$(b, 2))
b2 = Int(Mid$(b, 4, 2))
b3 = Int(Right$(b, 4))

If b1 > a1 Then
gun = (b1 - a1)
ElseIf b1 = a1 Then
gun = 0
Else
b2 = (b2 - 1)
gun = ((b1 + 30) - a1)
End If

If b2 > a2 Then
ay = (b2 - a2)
ElseIf b2 = a2 Then
ay = 0
Else
b3 = (b3 - 1)
ay = ((b2 + 12) - a2)
End If

Yıl = b3 - a3

If Yıl > 0 Then Yıl1 = (Yıl) Else: Yıl1 = (Yıl)
If ay > 0 Then Ay1 = (ay & " Ay, ") Else: Ay1 = ""
If gun > 0 Then Gun1 = (gun & " Gün ") Else: Gun1 = ""

Kidem = Yıl1


End Function
 
Katılım
1 Haziran 2005
Mesajlar
105
Excel Vers. ve Dili
Excel 2003-Türkçe
Excelde bu tarihler neden bu kadar sorun anlamıyorum her aradığım şeyin cevabını buluyorum yada benzerini ama bu tarih işini excel ile uğraştığımdan belli çözemedim gitti.
Bıktım valla tarihlerden gına gelmeye başladı. Ha excelde olmayacak birşey deseler boşver diyecem ama...
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,232
Excel Vers. ve Dili
Ofis 365 Türkçe
Sayın alitolga2000,

Tarih ve Saatler sadece xl de değil, bütün programlarda kullanmak zordur.

Siz dosyanızı ekleyiniz, yardım edecek arkadaş mutlaka bulunur.

İyi akşamlar.
 
Katılım
1 Mart 2007
Mesajlar
94
Excel Vers. ve Dili
Excel 2010 Eng
Merhabalar
İnşallah yanlış anlamamışımdır :) Formülü kidem($a$1;b1) yazdıktan sonra sağ tuşla sona kadar sürükleyin (IV ye kadar)
 
Katılım
1 Haziran 2005
Mesajlar
105
Excel Vers. ve Dili
Excel 2003-Türkçe
Bunu bilmiyordum bunun vba dan kaynaklandığını zannediyordum.
Ama inanın rahatladım yani sadece excel de olsaydı üzülecektim. :)
Dosya eklemeyi bende ilk başta yazarken düşündüm ama yapmayı istediğim şey zaten bir formül olarak yok.
Yani buraya yazdıklarımı sayfaya yazacaktım gibi birşey.

a1,b1,c1,d1,e1,f1,g1,h1,ı1,j1,k1,l1,m1,

satırlarında ilk başta başlangıç_tarihi ile başlayan son sütundada m1 ile (son_tarih) biten tarihler var bir ilk bir sontarih bu düzende uzayıp gidiyor.

ben =kidem(a1;m1) dediğimde

a1-b1 arasındaki farkı
c1-d1 arasındaki farkı
e1-f1 arasındaki farkı
.....

çıkarıp (çıkarmayı zaten yukardaki kod yapıyor.) bunları toplayacak.

a1-b1= 5
c1-d1= 10
......

=kidem(a1;m1) oda = 15 gibi.

Tekarar teşekkürler.
hayırlı geceler.
 
Katılım
1 Haziran 2005
Mesajlar
105
Excel Vers. ve Dili
Excel 2003-Türkçe
Fikir

Bu functionu normal sub yapıp.
Başka kod ile function yapıp bunu çağırsak.

Mesela : sub Kidem () (function olan)

bunuda

kidemler function ()

Döngü gibi birşeyle ; Seçtiğimiz hücreler ilk_tarih son_tarih 2 li olarak sonsuza kadar satır hizasında.
her ikiliyide sub Kidem le hesaplattırsak.

Böyle bir şey olabilirmi?
 
Katılım
1 Haziran 2005
Mesajlar
105
Excel Vers. ve Dili
Excel 2003-Türkçe
Dosyayı ekledim.
Eğer bu olabilirse işim çok kolaylaşacak.
Teşekkürler.
 
Son düzenleme:

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,232
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba

Bir fonksiyon yazdım, dener misiniz? ufak tefek kontrolleri yapmadım henüz,

Kod:
Function Necdet_KIDEM_HESAPLA(Tarihler As Range, Değer As Integer)
 
For Each Hücre In Tarihler
i = i + 1
j = i Mod 2
If j = 1 Then Bas_Tarih = Hücre
If j = 0 Then
Bit_Tarih = Hücre
Toplam_Gün = Toplam_Gün + Application.WorksheetFunction.Days360(Bas_Tarih, Bit_Tarih)
End If
Next Hücre
j = i Mod 2
If j <> 0 Then
Necdet_KIDEM_HESAPLA = "??"
Exit Function
End If
 
Kıdem_Yılı = Int(Toplam_Gün / 360)
Kıdem_Ay = Int((Toplam_Gün Mod 360) / 30)
Kıdem_Gün = Toplam_Gün - (Kıdem_Yılı * 360) - (Kıdem_Ay * 30)
 
If Değer = 1 Then Necdet_KIDEM_HESAPLA = Kıdem_Yılı
If Değer = 2 Then Necdet_KIDEM_HESAPLA = Kıdem_Ay
If Değer = 3 Then Necdet_KIDEM_HESAPLA = Kıdem_Gün
End Function
 
Katılım
1 Haziran 2005
Mesajlar
105
Excel Vers. ve Dili
Excel 2003-Türkçe
Hocam elinize kolunuza sağlık nasıl teşekkür edeceğimi bilemiyorum.
Çok ama çok sağolun.

Birde benim önceki formülümde eğer giriş tarihi varda çıkış tarihi yoksa bugünün tarihini baz alıp hesaplıyordu,

If Not IsDate(b) Then
b = Format(Now, "dd.mm.yyyy")
Else
If IsDate(b) Then b = Son_Tarih
End If


buydu galiba

Dosya tam siz bunu yazmadan önce 10 dk dan fazla bekletiyordu şu anda
tam 4-5 sn sürüyor. :)
Elinize sağlık.
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,232
Excel Vers. ve Dili
Ofis 365 Türkçe
Evet &#231;&#305;k&#305;&#351; tarihi yoksa hesaplatt&#305;rm&#305;yorum. g&#252;n&#252;n tarihi konulabilir. Tarih kontrol&#252; yapt&#305;rmad&#305;m &#231;&#252;nk&#252; sizden gelen yan&#305;t&#305; bekledim. do&#287;ru &#231;al&#305;&#351;&#305;p &#231;al&#305;&#351;mad&#305;&#287;&#305; konusunda
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,232
Excel Vers. ve Dili
Ofis 365 Türkçe
Sayın alitolga,

aşağıdaki kodları tekrar bir dener misiniz? Kırmızı olan satırlar eklendi yada düzeltildi

Kod:
Function Necdet_KIDEM_HESAPLA(Tarihler As Range, Değer As Integer)
    
For Each Hücre In Tarihler
[B][COLOR=red]    If Not IsDate(Hücre) Then Hücre = 0
[/COLOR][/B]    i = i + 1
    j = i Mod 2
    If j = 1 Then Bas_Tarih = Hücre
    If j = 0 Then
            Bit_Tarih = Hücre
            Toplam_Gün = Toplam_Gün + Application.WorksheetFunction.Days360(Bas_Tarih, Bit_Tarih)
    End If
Next Hücre
    j = i Mod 2
[B][COLOR=red]    If j <> 0 Then
        Bit_Tarih = Now
        Toplam_Gün = Toplam_Gün + Application.WorksheetFunction.Days360(Bas_Tarih, Bit_Tarih)
    End If
[/COLOR][/B]    
    Kıdem_Yılı = Int(Toplam_Gün / 360)
    Kıdem_Ay = Int((Toplam_Gün Mod 360) / 30)
    Kıdem_Gün = Toplam_Gün - (Kıdem_Yılı * 360) - (Kıdem_Ay * 30)
    
If Değer = 1 Then Necdet_KIDEM_HESAPLA = Kıdem_Yılı
If Değer = 2 Then Necdet_KIDEM_HESAPLA = Kıdem_Ay
If Değer = 3 Then Necdet_KIDEM_HESAPLA = Kıdem_Gün
End Function
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,232
Excel Vers. ve Dili
Ofis 365 Türkçe
Acele işe şeytan karışır diye boşuna dememişler :)

Kod:
Function Necdet_KIDEM_HESAPLA(Tarihler As Range, Değer As Integer)
 
For Each Hücre In Tarihler
[COLOR=red]If Hücre = "" Then Hücre = Now[/COLOR]
If Not IsDate(Hücre) Then Hücre = 0
i = i + 1
j = i Mod 2
If j = 1 Then Bas_Tarih = Hücre
If j = 0 Then
Bit_Tarih = Hücre
Toplam_Gün = Toplam_Gün + Application.WorksheetFunction.Days360(Bas_Tarih, Bit_Tarih)
End If
Next Hücre
j = i Mod 2
If j <> 0 Then
Bit_Tarih = Now
Toplam_Gün = Toplam_Gün + Application.WorksheetFunction.Days360(Bas_Tarih, Bit_Tarih)
End If
 
Kıdem_Yılı = Int(Toplam_Gün / 360)
Kıdem_Ay = Int((Toplam_Gün Mod 360) / 30)
Kıdem_Gün = Toplam_Gün - (Kıdem_Yılı * 360) - (Kıdem_Ay * 30)
 
If Değer = 1 Then Necdet_KIDEM_HESAPLA = Kıdem_Yılı
If Değer = 2 Then Necdet_KIDEM_HESAPLA = Kıdem_Ay
If Değer = 3 Then Necdet_KIDEM_HESAPLA = Kıdem_Gün
End Function
 
Katılım
1 Haziran 2005
Mesajlar
105
Excel Vers. ve Dili
Excel 2003-Türkçe
Tam İstediğim Gibi...

Siz hata yapsanız başka bir güzellik çıkar.

Ellerinize sağlık.
 
Üst