iki tarih arasındaki farkı alan vba function

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Katılım
19 Aralık 2005
Mesajlar
13
Arkadaşlar ben excel arka planında vba da modüle bir function yazmak istiyorum.Bu fonksiyonu kulanıp excelde tek hücrede iki tarih girip aralarıdaki farkı gün olarak vermesini istiyorum.Ama bir türlü beceremedim,yardımcı olursanız sevinirim.Excel sayafasında iki farklı hücreye tarih girip 3. hücrede bunların farkını alarak bunu yapabiliyorum ama bunu function olarak tek hücrede yapabilir miyim?
 

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,897
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
Aşağıdaki kodu bir deneyin.


Function gunfark(Tarih1 As Date, Tarih2 As Date) As String
Dim Y As Integer
Dim M As Integer
Dim D As Integer
Dim Temp1 As Date
Temp1 = DateSerial(Year(Tarih2), Month(Tarih1), Day(Tarih1))
Y = Year(Tarih2) - Year(Tarih1) + (Temp1 > Tarih2)
M = Month(Tarih2) - Month(Tarih1) - (12 * (Temp1 > Tarih2))
D = Day(Tarih2) - Day(Tarih1)
If D < 0 Then
M = M - 1
D = Day(DateSerial(Year(Tarih2), Month(Tarih2) + 1, 0)) + D + 1
End If
gunfark = Y & " Yıl " & M & " Ay " & D & " gün"
End Function
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Kullanıcı tanımlıda olsa verileri hücrelerden almanız gerekir, eğer aynı hücrede kullanacaksanız, bu durumda tarihleri fonksiyonun içine yazdığınız anlamına gelir. Aynı şeyi fonksiyon olarak aşağıdaki gibide yapabilirsiniz. 15.12.2005 tarihi ile 01.12.2005 tarihi arasındaki fark alınmıştır.

=TARİH(2005;12;15)-TARİH(2005;12;1)
 

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,897
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
leventm' Alıntı:
Kullanıcı tanımlıda olsa verileri hücrelerden almanız gerekir, eğer aynı hücrede kullanacaksanız, bu durumda tarihleri fonksiyonun içine yazdığınız anlamına gelir.
Sn. Leventin dediği gibi kodların içine yazmak gerekir. Benim verdiğin iki hücre arasındaki farkı bulur ya da Levent Bey'in dediği gibi TARİH(2005;12;15)-TARİH(2005;12;1) şeklinde denemeniz gerekecek.
 
Katılım
19 Aralık 2005
Mesajlar
13
Arkadaşlar ilginiz için teşekkürler
Fructose abi senin ilk yazdığın program benim işimi görecek gibi ama farkı tamamen gün sayısı olarak verdiremez miyiz?Yıl ay ve gün sayıları yerine toplma farkı gün sayısı olarak veremez mi?Bir de girdiğimiz tarih 1900 den küçük olursa sorun oluştumaz mı?
 

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,897
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
Aslında Excel'in hazır fonksiyonları varken gün için kullanıcı tanımlı bir fonksiyon ne yazmak ne kadar mantıklı bilmiyorum ama sen istediğin için yazdım.

Function gunfark(gun1 As Date, gun2 As Date) As String
gunfark = (gun1 - gun2) & " gün"
End Function
 
Katılım
19 Aralık 2005
Mesajlar
13
abi teşekkürler Dediğin gibi var olan bir foksiyonu yeniden yazmaya çalışıyor saylırım.Senin verdiğini denedim.Hatta benim ilk yazdığım program o ama excel sayfasında hücre içine =gunfarkı(10/12/2005;12/12/2005) gibi giremiyorum yada ben yanlış mı yazıyorum.Senin verdiğin bu fonksiyonda gün1 ve gün2 yi nasıl girecem ay yıl ve günü ne ile ayırarak gireyimki çalışsın bu program.Ayrıca ilk yazdığın programda sonucu gün verecek şekilde değiştirsen olmaz mı?Ben hücrede
=günfarkı(tarih1;tarih2) yazıp bu sonuca varmak istiyorum.Çoooooooook teşekkürler.
 

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,897
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
A1 hücresinde 11.06.2005 olsun
B1 hücresinde 23.11.2005 olsun.

=gunfark(B1;A1) olarak yaz
Burada gun1=B1 gun2=A1

Not: Sonucu zaten gün olarak verecek..
 
Katılım
19 Aralık 2005
Mesajlar
13
abi senin yaptığın zaten daha önce gönderdiğinle aynı. :kafa: Ben anlatamıyorum galiba.Ben yadığım fonksiyonu kullanarak tek hücrede 2 tarihi elle o an girmek istiyorum.Yani bu fonksiyonun 2 değişkeni olacak ve başka hücreden okunmayacak,kullanıcı bunu kendi fonksiyonu kullanırken girecek. :yardim:
 

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,897
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
Aynı hücrede Gün1'e 11.09.2005 Gün2 ye 11 12.2002 yani aşağıdaki gibi yaz

=gunfark("11.09.2005";"11.12.2002") şeklinde yaz..

Buda olmadı deme düşüp bayılacağım..
 
Katılım
19 Aralık 2005
Mesajlar
13
oldu teşekkürler bu işi mi görür.Ama bi hata var çözemedim.Þu işlemi yaptım ne iş yaptığını anlamadım:=gunfark("10.12.0350";"10.14.0350") işlemi yaptım ama -57 gün çıktı.10.14.0350-10-12.0350 nasıl -57 çıktı anlamadım.Ve bufonksiyon ayı ve günü fazla girince ne yapıyor fazlalığı? :?
 

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,897
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
Sayın salem, 10.14.0350 yazmışsınız bir yılda 14 ay yok ki
Bunun için bir Mod fonksiyonu eklemek gerekecek 12 aydan fazla girildiğinde fazlasını üstüne ekleyecek.
 
Katılım
16 Aralık 2005
Mesajlar
130
Sayın salem, 10.14.0350 yazmışsınız bir yılda 14 ay yok ki
Bunun için bir Mod fonksiyonu eklemek gerekecek 12 aydan fazla girildiğinde fazlasını üstüne ekleyecek.
Arkadaşımız öyle bir çözüm istiyorki, aklına ne gelirse yapacak ve fonksiyon onu çözecek. Bu fonksiyonları kullanan kişilerin en azından bir yılda 14 ay olmadığını bilecek kadar bir bilgi birikimine sahip olması gerekir diye düşünüyorum.
 

Ali

Uzman
Katılım
21 Temmuz 2005
Mesajlar
7,897
Excel Vers. ve Dili
İş:Excel 2016-Türkçe
Sn osmantelci, yukarı bakarsanız onu daha önce vermiştim..
 
Katılım
28 Nisan 2005
Mesajlar
252
Excel Vers. ve Dili
Excel 2010 Türkçe
salem' Alıntı:
...tek hücrede iki tarih girip aralarıdaki farkı gün olarak vermesini istiyorum.....
Sn. osmantelci'nin koduna küçük bir ek yaparak bir çözüm üretmeye çalıştım umarım olmuştur. Yalnız tek hücreye tarih girişi yapılırken iki tarih arasında bir boşluk girilmesi gerekiyor.
Kod:
Function Trhh(data) As String
Dim yil As Integer
Dim ay As Integer
Dim gun As Integer
Dim tarih As Date
    Temp = Split(Trim(data), " ")
    ilkTarih = IIf(1, Temp(0), StrReverse(Temp(0)))
    SonTarih = IIf(1, Temp(1), StrReverse(Temp(1)))

If ilkTarih > SonTarih Then
  MsgBox "İlk seçilen tarih küçük olmalı, sonuç buna göre hesaplanıyor."
  tarih = ilkTarih
  ilkTarih = SonTarih
  SonTarih = tarih
End If

yil = Year(SonTarih) - Year(ilkTarih)

If DateSerial(Year(SonTarih), Month(ilkTarih), Day(ilkTarih)) > SonTarih Then
  yil = yil - 1
End If

  If Month(SonTarih) > Month(ilkTarih) Then
    If Day(SonTarih) >= Day(ilkTarih) Then
      ay = Month(SonTarih) - Month(ilkTarih)
    Else
      ay = Month(SonTarih) - Month(ilkTarih) - 1
    End If
    Else
    If Day(SonTarih) >= Day(ilkTarih) Then
    ay = Month(SonTarih) - Month(ilkTarih) + 12
    If ay = 12 Then ay = 0
      Else
      ay = Month(SonTarih) - Month(ilkTarih) + 11
    End If
  End If

  If Day(SonTarih) >= Day(ilkTarih) Then
    gun = Day(SonTarih) - Day(ilkTarih)
    Else
    gun = Day(DateSerial(Year(ilkTarih), Month(ilkTarih) + 1, 1) - 1) - Day(ilkTarih) + Day(SonTarih)
  End If
  
  Trhh = yil & " yıl " & ay & " ay " & gun & " gün"

End Function
:arkadas:
 
Katılım
19 Aralık 2005
Mesajlar
13
Teşekkürler herşey için daha fazla uğraşmanıza gerek yok.Herşey için teşekkür ederim.Algi kardeşim senin son yazdığın fonksiyon excel eklentisi olarak kulanılamaz,kulanılamıyor zaten.Zannedersem sen visualda bunu çalıştırabilirsin.Benim nildiğim kadarıyla kulanıcı tanımlı fınksiyonda msgbox olmaz.sen bunu nasıl çalıştırdın excelde
hem sonuç gün olarak çıkmaz ki yıl ay gün olarak verecek,ben onu istemiyorum ama teşkkürler. :boo: :boo:
 

zafer

Super Moderator
Yönetici
Katılım
8 Mart 2005
Mesajlar
3,288
Excel Vers. ve Dili
OFFICE 2003 TÜRKÇE
OFFICE 2010 TÜRKÇE
Merhaba

Çözüm bulunmayabilir.istenilen şeyler normalin dışında da olabilir.Fakat lütfen konuşmalarımızdaki üslup'a dikkat edip birbirimizi kırmayalım.


Saygılarımla
 
Katılım
16 Aralık 2005
Mesajlar
130
salem' Alıntı:
Teşekkürler herşey için daha fazla uğraşmanıza gerek yok.Herşey için teşekkür ederim.Algi kardeşim senin son yazdığın fonksiyon excel eklentisi olarak kulanılamaz,kulanılamıyor zaten.Zannedersem sen visualda bunu çalıştırabilirsin.Benim nildiğim kadarıyla kulanıcı tanımlı fınksiyonda msgbox olmaz.sen bunu nasıl çalıştırdın excelde
hem sonuç gün olarak çıkmaz ki yıl ay gün olarak verecek,ben onu istemiyorum ama teşkkürler. :boo: :boo:
Sanırım arkadaşın niyeti sorununa çözüm bulmak değil. Kendi çapında eğlenmeye çalışıyor. Yazım tarzından belli bir bilgi birikimine sahip olduğu da anlaşılıyor, acaba niyeti ne?
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst