• DİKKAT

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

ChatGPT'den tarih çözümü

  • Konbuyu başlatan Konbuyu başlatan besen
  • Başlangıç tarihi Başlangıç tarihi

besen

Altın Üye
Katılım
23 Mart 2007
Mesajlar
803
Excel Vers. ve Dili
Microsoft Office Professional Plus 2019
İngilizce
ChatGPT'ye dedim ki;
Excel’de bir formül lazım.
Şöyle ki:
A1 hücresinde bir tarih var, mesela 25.03.2026. Bu tarihe 90 gün vade koyuyorum, 23.06.2026 oluyor.
Bu yeni tarih eğer o ayın 2’nci Perşembesinden öncesiyse o gün, 2’nci Perşembeden sonra ve 4’ncü Perşembeden önceyse o günü bulmam gerekir.
2026 yılı, Haziran ayı, 2’nci Perşembe günü 11 Haziran 2026, 4’üncü Perşembe günü 25 Haziran 2026.
Benim formül sonucu ulaşmam gereken tarih 25 Haziran 2026 olmalı.

Temmuz ayı için bir örnek yapayım.
A1 hücresinde bir tarih var, mesela 10.04.2026. Bu tarihe 90 gün vade koyuyorum, 09.07.2026 oluyor.
2026 yılı, Temmuz ayı, 2’nci Perşembe günü 09 Temmuz 2026, 4’üncü Perşembe günü 23 Temmuz 2026.
Benim formül sonucu ulaşmam gereken tarih 09 Temmuz 2026 olmalı.

İki formül yazdı, alttakini ilk defa görüyorum.

=IF(A1="";"";IF(A1+90<=DATE(YEAR(A1+90);MONTH(A1+90);1)+MOD(4-WEEKDAY(DATE(YEAR(A1+90);MONTH(A1+90);1);2)+7;7)+7;DATE(YEAR(A1+90);MONTH(A1+90);1)+MOD(4-WEEKDAY(DATE(YEAR(A1+90);MONTH(A1+90);1);2)+7;7)+7;DATE(YEAR(A1+90);MONTH(A1+90);1)+MOD(4-WEEKDAY(DATE(YEAR(A1+90);MONTH(A1+90);1);2)+7;7)+21))

=LET(DUE; A1+90;FIRSTDAY; DATE(YEAR(DUE); MONTH(DUE); 1);FIRSTTHU; FIRSTDAY + MOD(4- WEEKDAY(FIRSTDAY; 2); 7);SECONDTHU; FIRSTTHU + 7;FOURTHTHU; FIRSTTHU + 21;IF(DUE <= SECONDTHU;SECONDTHU; FOURTHTHU))
 
ChatGPT'yle formülü bir yere kadar getirdim, Resmi Tatil işin içine girince hesaplayamadı.
Ekli Tabloda görüleceği üzere diğer bütün seçenekler doğru (şimdilik gördüğüm kadarıyla), resmi tatil hesabında 7 gün fark oluyor.
ChatGPT'ye haddini bildirecek biri vardır muhakkak. 🥰
 

Ekli dosyalar

Merhaba,
... Bu yeni tarih eğer o ayın 2’nci Perşembesinden öncesiyse o gün, 2’nci Perşembeden sonra ve 4’ncü Perşembeden önceyse o günü bulmam gerekir. ..

Burada belirttiğiniz her 2 koşulda yine A1+90 gününe denk gelmiyor mu? Neden 2. ve 4. perşembeye takıldınız?

Ve 4.Perşembeyi geçiyor ise hangi tarih gelecek?
 
Merhaba,


Burada belirttiğiniz her 2 koşulda yine A1+90 gününe denk gelmiyor mu? Neden 2. ve 4. perşembeye takıldınız?

Ve 4.Perşembeyi geçiyor ise hangi tarih gelecek?
Açıklamada yazılı. Ertesi ayın ikinci perşembesi.
 
Sorunuz aslında bu kadar kısa diye düşünüyorum:

- A sütununa girmiş olduğum tarihe vade olarak 90 gün vade eklenecek,
- Varılan tarih ilgili ayın 2.Perşembesinden önce ise 2.Perşembe gününün tarihi,
- 2. Perşembesini geçmiş ve 4. Perşembeyi geçmemiş ise 4.Perşembe gününün tarihi,
- Varılan tarih resmi tatil gününe denk geliyor ise 2 hafta sonraki perşembe gününün tarihini yazdırmak istiyorsunuz

Cevap (Formül):
İç içe geçmiş yığılı bir formül ile olur neden olmasın,
*Ad tanımlaması ile resmi tatiller gruplandırıldı: resmi_tatiller **Örnekte tatil günleri rastgele yazılmıştır.

AI ile alınan formül' Alıntı:
=EĞER(EĞERSAY(resmi_tatiller;EĞER(A1+90<=(SERİAY(A1+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİAY(A1+90;-1)+1;2);7)+7);(SERİAY(A1+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİAY(A1+90;-1)+1;2);7)+7);EĞER(A1+90<=(SERİAY(A1+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİAY(A1+90;-1)+1;2);7)+21);(SERİAY(A1+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİAY(A1+90;-1)+1;2);7)+21);(SERİAY(A1+90;0)+1+MOD(4-HAFTANINGÜNÜ(SERİAY(A1+90;0)+1;2);7)+7))))>0;EĞER(A1+90<=(SERİAY(A1+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİAY(A1+90;-1)+1;2);7)+7);(SERİAY(A1+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİAY(A1+90;-1)+1;2);7)+21);EĞER(A1+90<=(SERİAY(A1+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİAY(A1+90;-1)+1;2);7)+21);(SERİAY(A1+90;0)+1+MOD(4-HAFTANINGÜNÜ(SERİAY(A1+90;0)+1;2);7)+7);(SERİAY(A1+90;0)+1+MOD(4-HAFTANINGÜNÜ(SERİAY(A1+90;0)+1;2);7)+21)));EĞER(A1+90<=(SERİAY(A1+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİAY(A1+90;-1)+1;2);7)+7);(SERİAY(A1+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİAY(A1+90;-1)+1;2);7)+7);EĞER(A1+90<=(SERİAY(A1+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİAY(A1+90;-1)+1;2);7)+21);(SERİAY(A1+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİAY(A1+90;-1)+1;2);7)+21);(SERİAY(A1+90;0)+1+MOD(4-HAFTANINGÜNÜ(SERİAY(A1+90;0)+1;2);7)+7))))

Cevap (VBA):
Bu kadar uzun formül ile uğraşmak istemiyorum, daha kısa bir yol arıyorum diyorsanız Kullanıcı Tanımlı Fonksiyon yazabilirsiniz.

Dosyanıza modül ekleyin ve içine bu kodları yazın, kullanmak istediğiniz yerde ilgili hücre için formülü kullanın: (Ör: A90 hücresi) =PersembeHesapla(A90)

AI ile alınan VBA kodları' Alıntı:
Function PersembeHesapla(hucre As Range) As Variant
Dim hedefTarih As Date
Dim P2 As Date, P4 As Date, P2_Gelecek As Date, P4_Gelecek As Date
Dim finalTarih As Date

If Not IsDate(hucre.Value) Then
PersembeHesapla = "Geçersiz Tarih"
Exit Function
End If

' 1. Adım: A1 + 90 gün
hedefTarih = hucre.Value + 90

' 2. Adım: O ayın 2. ve 4. Perşembesini bul
P2 = NinciPersembeBul(Year(hedefTarih), Month(hedefTarih), 2)
P4 = NinciPersembeBul(Year(hedefTarih), Month(hedefTarih), 4)

' 3. Adım: Sonraki ayın 2. ve 4. Perşembesini bul
Dim gelecekAy As Date
gelecekAy = DateAdd("m", 1, hedefTarih)
P2_Gelecek = NinciPersembeBul(Year(gelecekAy), Month(gelecekAy), 2)
P4_Gelecek = NinciPersembeBul(Year(gelecekAy), Month(gelecekAy), 4)

' 4. Adım: Tarih seçim mantığı
If hedefTarih <= P2 Then
finalTarih = P2
ElseIf hedefTarih <= P4 Then
finalTarih = P4
Else
finalTarih = P2_Gelecek
End If

' 5. Adım: Resmi Tatil kontrolü (Eğer tatilse bir sonrakine atla)
' Not: "resmi_tatiller" adında bir alan tanımladığınızdan emin olun
On Error Resume Next ' Liste yoksa hata vermemesi için
If WorksheetFunction.CountIf(Range("resmi_tatiller"), finalTarih) > 0 Then
If finalTarih = P2 Then
finalTarih = P4
ElseIf finalTarih = P4 Then
finalTarih = P2_Gelecek
ElseIf finalTarih = P2_Gelecek Then
finalTarih = P4_Gelecek
End If
End If
On Error GoTo 0

PersembeHesapla = finalTarih
End Function

' Düzenlenmiş Yardımcı Fonksiyon
Function NinciPersembeBul(Yil As Integer, Ay As Integer, N As Integer) As Date
Dim ilkGun As Date
Dim gunFarki As Integer

ilkGun = DateSerial(Yil, Ay, 1)

' Perşembe haftanın 4. günüdür (Pazartesi=1 alırsak)
' (İstediğimizGün - MevcutGün + 7) Mod 7 formülü
gunFarki = (4 - Weekday(ilkGun, vbMonday) + 7) Mod 7

' Ayın ilk Perşembesi + (N-1) hafta
NinciPersembeBul = ilkGun + gunFarki + ((N - 1) * 7)
End Function
Sonuç:
1773855455339.png

İyi çalışmalar.
 
EĞERSAY(resmi_tatiller yerine ne yazacağım, hücre aralığını mı? =($A$8:$A$12)
 
*Ad tanımlaması ile resmi tatiller gruplandırıldı: resmi_tatiller
Ad tanımlaması için kullanacağınız formülü soruyorsanız sayfayı da belirtmeniz gerekir. =Sayfa1!$A$8:$A$12
yada verdiğiniz formülü resmi_tatiller yazan yer ile değiştirebilirsiniz.

=EĞER(EĞERSAY($A$8:$A$12;EĞER(A1+90< ...

*Kullandığınız sürümün ingilizce olduğunu atlayıp türkçe olarak formülü paylaşmış bulundum bu siteden ingilizceye çevirebilirsiniz.

İyi çalışmalar
 
Son düzenleme:
Ad tanımlaması için kullanacağınız formülü soruyorsanız sayfayı da belirtmeniz gerekir. =Sayfa1!$A$8:$A$12
yada verdiğiniz formülü resmi_tatiller yazan yer ile değiştirebilirsiniz.

=EĞER(EĞERSAY($A$8:$A$12;EĞER(A1+90< ...

*Kullandığınız sürümün ingilizce olduğunu atlayıp türkçe olarak formülü paylaşmış bulundum bu siteden ingilizceye çevirebilirsiniz.

İyi çalışmalar
#VALUE! çıktı neyi yanlış yaptım acaba? F1 hücresine bakar mısınız.
 

Ekli dosyalar

#VALUE! çıktı neyi yanlış yaptım acaba? F1 hücresine bakar mısınız.

Yukarıda vermiş olduğum formülü direk kullandığınızda dosyanızın A1 hücresinde tarih olmadığından değer hatası almanız normal.
Örnek dosyanız orijinal dosyanız ile aynı konumda ise; F8 hücresi için bu formülde bulunan A1 referanslarını B8 olarak değiştirmeniz gerekir.

Yani dosyanızda 8.satırda dilediğiniz sütunda (Dosyanızda F8) formülü yapıştırıp aşağı doğru hücre kulpundan çekebilirsiniz.

B8 de işlem tarihi başlıyorsa kullanman gereken formül' Alıntı:
=EĞER(EĞERSAY(resmi;EĞER(B8+90<=(SERİTARİH(B8+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİTARİH(B8+90;-1)+1;2);7)+7);(SERİTARİH(B8+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİTARİH(B8+90;-1)+1;2);7)+7);EĞER(B8+90<=(SERİTARİH(B8+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİTARİH(B8+90;-1)+1;2);7)+21);(SERİTARİH(B8+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİTARİH(B8+90;-1)+1;2);7)+21);(SERİTARİH(B8+90;0)+1+MOD(4-HAFTANINGÜNÜ(SERİTARİH(B8+90;0)+1;2);7)+7))))>0;EĞER(B8+90<=(SERİTARİH(B8+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİTARİH(B8+90;-1)+1;2);7)+7);(SERİTARİH(B8+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİTARİH(B8+90;-1)+1;2);7)+21);EĞER(B8+90<=(SERİTARİH(B8+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİTARİH(B8+90;-1)+1;2);7)+21);(SERİTARİH(B8+90;0)+1+MOD(4-HAFTANINGÜNÜ(SERİTARİH(B8+90;0)+1;2);7)+7);(SERİTARİH(B8+90;0)+1+MOD(4-HAFTANINGÜNÜ(SERİTARİH(B8+90;0)+1;2);7)+21)));EĞER(B8+90<=(SERİTARİH(B8+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİTARİH(B8+90;-1)+1;2);7)+7);(SERİTARİH(B8+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİTARİH(B8+90;-1)+1;2);7)+7);EĞER(B8+90<=(SERİTARİH(B8+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİTARİH(B8+90;-1)+1;2);7)+21);(SERİTARİH(B8+90;-1)+1+MOD(4-HAFTANINGÜNÜ(SERİTARİH(B8+90;-1)+1;2);7)+21);(SERİTARİH(B8+90;0)+1+MOD(4-HAFTANINGÜNÜ(SERİTARİH(B8+90;0)+1;2);7)+7))))
 
Yukarıda vermiş olduğum formülü direk kullandığınızda dosyanızın A1 hücresinde tarih olmadığından değer hatası almanız normal.
Örnek dosyanız orijinal dosyanız ile aynı konumda ise; F8 hücresi için bu formülde bulunan A1 referanslarını B8 olarak değiştirmeniz gerekir.

Yani dosyanızda 8.satırda dilediğiniz sütunda (Dosyanızda F8) formülü yapıştırıp aşağı doğru hücre kulpundan çekebilirsiniz.
Haklısınız dikkatsizlik oldu.
Ancak ilk tarihe göre 11.06.2026 gelmeli, bu formülde de 04.06.2026 geliyor.
 
23.02.2026 tarihine göre sonuç neden 11.06.2026 çıkmalı?

Bu tarihe 90 gün ekleyince sonuç ; 24.05.2026 çıkıyor. Bu tarih MAYIS ayının 2. Perşembe ve 4. Perşembe günü arasında kalıyor. Bu durumda 2. koşul maddeniz geçerli oluyor. Sonuç olarak 28.05.2026 tarihi çıkmalı..

Sanırım burada 4. koşulunuz devreye giriyor.

Koşul 4 ; Çıkan Tarihe göre hesaplanan Perşembe günü, Resmi Tarihe denk geliyorsa ve ikinci Perşembe içinde kalıyorsa, İkinci Perşembe, 4'üncü Perşembe içinde kalıyorsa 4'üncü Perşembe gelmeli.

28.05.2026 tarihi resmi tatile denk geliyor. Burada kırmızı bölümlerde bir karışıklık var sanırım. Hangi ayın 2. ve 4. Perşembe günü kast ediliyor.
 
Geri
Üst