Soru Gün Sayısından Yıl Ay Gün bulma

sirkülasyon

Altın Üye
Katılım
10 Temmuz 2012
Mesajlar
2,532
Excel Vers. ve Dili
2021 LTSC TR
Altın Üyelik Bitiş Tarihi
18-06-2026
E5 : E30 arasında bulunan hücrelere gün sayısını girdiğim zaman hemen yan hücreye anında ... Yıl ... Ay ... Gün yazacak vba koduna ihtiyacım bulunmaktadır. Yardımcı olabilir misiniz?
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,070
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Yılı 360, ayı 30 gün kabul ederek aşağıdaki kodu kullanabilirsiniz. 360 ve 30 olmazsa koddaki sayıları isteğinize göre değiştirin. Kodlar ilgili sayfanın kod bölümüne yapıştırılacak:

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [E5:E30]) Is Nothing Then Exit Sub
If Selection.Count > 1 Then Exit Sub
If Target = "" Then
    Target.Offset(0, 1) = ""
ElseIf IsNumeric(Target) = False Then
    Target.Offset(0, 1) = ""
Else
    Target.Offset(0, 1) = WorksheetFunction.RoundDown(Target / 360, 0) & " yıl " & WorksheetFunction.RoundDown(Target Mod 360 / 30, 0) & " ay " & Target Mod 30 & " gün "
End If
End Sub
 

sirkülasyon

Altın Üye
Katılım
10 Temmuz 2012
Mesajlar
2,532
Excel Vers. ve Dili
2021 LTSC TR
Altın Üyelik Bitiş Tarihi
18-06-2026
Yusuf Hocam
E sütununa 22 yazdığım zaman F sütununa 0 yıl 10 ay 22 gün yazıyor.
850 gün yazdığım zaman 2 yıl 10 ay 10 gün yazıyor.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,070
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Öyleymiş maalesef, nedenini çözemedim. Aşağıdaki gibi yapınca sıkıntı olmuyor:

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [E5:E30]) Is Nothing Then Exit Sub
If Selection.Count > 1 Then Exit Sub
If Target = "" Then
    Target.Offset(0, 1) = ""
ElseIf IsNumeric(Target) = False Then
    Target.Offset(0, 1) = ""
Else
    Target.Offset(0, 1).FormulaR1C1 = _
        "=ROUNDDOWN(RC[-1]/360,0)&"" yıl ""&ROUNDDOWN(MOD(RC[-1],360)/30,0)&"" ay ""&MOD(RC[-1],30)&"" gün"""
    Target.Offset(0, 1) = Target.Offset(0, 1).Value
End If
End Sub
 

sirkülasyon

Altın Üye
Katılım
10 Temmuz 2012
Mesajlar
2,532
Excel Vers. ve Dili
2021 LTSC TR
Altın Üyelik Bitiş Tarihi
18-06-2026
teşekkür ederim.
Ellerine sağlık.
 
Katılım
6 Mart 2005
Mesajlar
6,233
Excel Vers. ve Dili
Excel Vers. ve Dili:
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
22/12/2022
Alternatif olarak.
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [E5:E30]) Is Nothing Then Exit Sub
If Selection.Count > 1 Then Exit Sub
If Target = "" Then
    Target.Offset(0, 1) = ""
ElseIf IsNumeric(Target) = False Then
    Target.Offset(0, 1) = ""
Else
Target.Offset(0, 1).FormulaLocal = "=Etarihli(0 " & ";" & Target.Address & ";" & """y"")& "" Yıl ""& " _
   & " Etarihli(0 " & ";" & Target.Address & ";" & """ym"")& "" Ay ""& " _
   & "Etarihli(0 " & ";" & Target.Address & ";" & """md"")& "" Gün"""
  End If
End Sub
 
Katılım
6 Mart 2005
Mesajlar
6,233
Excel Vers. ve Dili
Excel Vers. ve Dili:
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
22/12/2022
Daha doğru sonuç için
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [E5:E30]) Is Nothing Then Exit Sub
If Selection.Count > 1 Then Exit Sub
If Target = "" Then
    Target.Offset(0, 1) = ""
ElseIf IsNumeric(Target) = False Then
    Target.Offset(0, 1) = ""
Else
Target.Offset(0, 1).FormulaLocal = "=ETARİHLİ(BUGÜN()" & "-" & Target.Address & ";" & "BUGÜN()" & ";" & """y"")& "" Yıl ""& " _
   & "ETARİHLİ(BUGÜN()" & "-" & Target.Address & ";" & "BUGÜN()" & ";" & """ym"")& "" Ay ""& " _
   & "ETARİHLİ(BUGÜN()" & "-" & Target.Address & ";" & "BUGÜN()" & ";" & """md"")& "" Gün """
  End If
End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,006
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bilgilendirme için yazıyorum. Hücreye 43911 yazdığımda hatalı sonuç verdi.
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,849
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Merhaba Arkadaşım,
Acaba bu işinizi görür mü?
İyi çalışmalar
 

Ekli dosyalar

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,070
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Bilgilendirme için yazıyorum. Hücreye 43911 yazdığımda hatalı sonuç verdi.
Sanıyorum bunun sebebi bugünün (20/03/2020) exceldeki karşılığının 43910 olması. Formül -1. günü bulup, ona göre işlem yaptığından bu hata çıkıyor. Malum excelde tarihler 01/01/1900'den itibaren başlar ve bu tarihin karşılığı 1'dir. Tabi siz daha iyi biliyorsunuz bu durumu :)
 

Tevfik_Kursun

Altın Üye
Katılım
30 Temmuz 2012
Mesajlar
3,849
Excel Vers. ve Dili
Office 2016 Pro - Türkçe 64 Bit
Altın Üyelik Bitiş Tarihi
12-02-2029
Merhaba Arkadaşım,
Bu da alternatifi.
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
   Application.Calculate
    If Intersect(Target, [E5:E30]) Is Nothing Then Exit Sub
    If Target = "" Then
        Target.Offset(0, 1) = ""
            Else
        Target.Offset(0, 1) = Target.Offset(0, 0)
            ActiveCell.FormulaR1C1 = "=DATE(YEAR(RC[-1]),MONTH(RC[-1]),DAY(RC[-1]))"
            Selection.Copy
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
    End If
End Sub
İyi çalışmalar
 
Son düzenleme:

sirkülasyon

Altın Üye
Katılım
10 Temmuz 2012
Mesajlar
2,532
Excel Vers. ve Dili
2021 LTSC TR
Altın Üyelik Bitiş Tarihi
18-06-2026
Allah cümlenizden razı olsun. Hepinize ayrı ayrı teşekkür eder, saygılarımı sunarım
 
Katılım
6 Mart 2005
Mesajlar
6,233
Excel Vers. ve Dili
Excel Vers. ve Dili:
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
22/12/2022
Sanırım şimdi sorun çıkmaz.
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [E5:E30]) Is Nothing Then Exit Sub
If Selection.Count > 1 Then Exit Sub
If Target = "" Then
    Target.Offset(0, 1) = ""
ElseIf IsNumeric(Target) = False Then
    Target.Offset(0, 1) = ""
Else
Target.Offset(0, 1).FormulaLocal = "=ETARİHLİ( Bugün()" & ";" & "BUGÜN()" & "+" & Target.Address & ";" & """y"")& "" Yıl ""& " _
   & "ETARİHLİ( Bugün()" & ";" & "BUGÜN()" & "+" & Target.Address & ";" & """ym"")& "" Ay ""& " _
   & "ETARİHLİ( Bugün()" & ";" & "BUGÜN()" & "+" & Target.Address & ";" & """md"")& "" Gün """
End If
End Sub
 

sirkülasyon

Altın Üye
Katılım
10 Temmuz 2012
Mesajlar
2,532
Excel Vers. ve Dili
2021 LTSC TR
Altın Üyelik Bitiş Tarihi
18-06-2026

150 Gün için = 0 Yıl 4 Ay 28 Gün​


200 Gün İçin = 0 Yıl 6 Ay 16 Gün
olarak veriyor

 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,070
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Sayın sirkülasyon hangi sonucu vermesi gerektiğini ve nasıl hesaplandığını gösterseniz daha iyi olmaz mı?
 

sirkülasyon

Altın Üye
Katılım
10 Temmuz 2012
Mesajlar
2,532
Excel Vers. ve Dili
2021 LTSC TR
Altın Üyelik Bitiş Tarihi
18-06-2026
Sayın Hocam;
150 Gün 5 ay
200 Gün 6 Ay 20 gün diye biliyorum.
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,070
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
O zaman benim verdiğim kodun çözmesi gerekir. Çözmüyor mu?
 

sirkülasyon

Altın Üye
Katılım
10 Temmuz 2012
Mesajlar
2,532
Excel Vers. ve Dili
2021 LTSC TR
Altın Üyelik Bitiş Tarihi
18-06-2026
Yusuf Hocam
Benim mesajım Sayın ÇITIR' ın 13 nolu mesajdaki koda istinaden yazılmıştı.
150 gün ya da 200 gün böyle çıkıyor bilginiz olsun demek istedim. 12 nolu mesajdan sonra yazılan bir mesaj.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
43,006
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Soruyu detaylı sormanın önemi burada belli oluyor.

İlk mesajınızda bir iki örnek vererek ve talep ettiğiniz hesaplama yöntemini de izah ederek sorunuzu sorsaydınız konu bu kadar uzamazdı.
 
Katılım
6 Mart 2005
Mesajlar
6,233
Excel Vers. ve Dili
Excel Vers. ve Dili:
Office 2016 TR 64 Bit
Altın Üyelik Bitiş Tarihi
22/12/2022
Sayın sirkülasyon;
150 gün bulunulan ay ve hesap edilen ay arasındaki ayların gün sayısına göre değişebilir.150 günün 5 ay çıkmasını tüm ayların 30 gün olarak kabul edilmesine bağlıdır.Benim verdiğim formüllerde tüm aylar 30 gün değildir.Gerçekde olduğu gibi aylar 30 ve 31 gün şeklinde hesaplama yapılır ve yıl 360 gün değildir.Siz istediğiniz hesaplama yöntemini kullanabilirsiniz.Benimkisi alternatif olsun.
 
Üst