kullandığım bi formülün vba kodunu bi türlü beceremedim yardım edermisiniz

Cengizhantr06

Altın Üye
Katılım
16 Mayıs 2020
Mesajlar
301
Excel Vers. ve Dili
Office 365 Türkçe
Altın Üyelik Bitiş Tarihi
18-05-2025
=EĞER(HAFTANINGÜNÜ(C3;2)<=5;C3;EĞER(HAFTANINGÜNÜ(C3;2)=6;C3+2;C4+1))

c hücresine tarih girince d hücresi bu kod calısıyor tarih cumartesi oazara geliyosa onu direk pazartesiye atıyor
bnun vba kodunu nasıl yapabilirim
 
Katılım
21 Ağustos 2005
Mesajlar
625
Excel Vers. ve Dili
Office 365 - İngilizce
Siz c hücresine yazdığınız tarihin, d hücresinde haftanın hangi günü olduğunu mu yazdırmak istiyorsunuz?
 
Katılım
21 Ağustos 2005
Mesajlar
625
Excel Vers. ve Dili
Office 365 - İngilizce
=EĞER(HAFTANINGÜNÜ(C3;2)<=5;C3;EĞER(HAFTANINGÜNÜ(C3;2)=6;C3+2;C4+1))
Formülünüz şu anlama geliyor, C3 hücresindeki tarih haftanın ilk 5 gününe eşit veya küçükse onu al, haftanın 6. günü ise yani cumartesi ise 2 gün sonrasını al yani pazartesi sonucunu ver, haftanın 7. günü ise yani pazar ise 1 gün sonrasını al yani pazartesi sonucunu ver. Dolayısıyla formül dediğiniz gibi işlem yapıyor. Siz tam olarak ne yapmak istiyorsunuz?
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Aşağıdaki makroyu deneyin:

PHP:
Sub tarih()
If WorksheetFunction.Weekday([C3], 2) < 6 Then
    [D3] = [C3]
ElseIf WorksheetFunction.Weekday([C3], 2) = 6 Then
    [D3] = [C3] + 2
Else
    [D3] = [C3] + 1
End If
End Sub
 

Cengizhantr06

Altın Üye
Katılım
16 Mayıs 2020
Mesajlar
301
Excel Vers. ve Dili
Office 365 Türkçe
Altın Üyelik Bitiş Tarihi
18-05-2025
Siz c hücresine yazdığınız tarihin, d hücresinde haftanın hangi günü olduğunu mu yazdırmak istiyorsunuz?
hayır c hücresine tarih girecem ve bu tarih d hücresine gelecek ama eğer c deki tarih hafta sonuna geliyorsa d hücresinde bu değişip hafta içine pazartsiye gelecek mesala c ye 17.05.2020 girdim bu pazara geliyo ve d hücresi ise bunu bi gün sonraya atıp yani d de 18.05.2020 yazacak c ye girdiğim tarihler hafta içine geliyosa aynı öle d ye gececek ama c ye girdiğim tarihler hafta sonu cumaertesi yada pazara geliyosa bu d ye geçince pazartesi tarihi olacak
 

Cengizhantr06

Altın Üye
Katılım
16 Mayıs 2020
Mesajlar
301
Excel Vers. ve Dili
Office 365 Türkçe
Altın Üyelik Bitiş Tarihi
18-05-2025
süper tam oldu çok tesekkür ederim ama son bisey bunu c2 den baslayıp for döngüsü ile c40000 e kadar nasıl yapabilirim ?
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
Aşağıdaki gibi olabilir ama verilerin çokluğuna göre işlem uzun sürebilir:

PHP:
Sub tarih()
Application.ScreenUpdating = False
    For i = 2 To Cells(Rows.Count, "C").End(3).Row
        If WorksheetFunction.Weekday(Cells(i, "C"), 2) < 6 Then
            Cells(i, "D") = Cells(i, "C")
        ElseIf WorksheetFunction.Weekday([C3], 2) = 6 Then
            Cells(i, "D") = Cells(i, "C") + 2
        Else
            Cells(i, "D") = Cells(i, "C") + 1
        End If
    Next
Application.ScreenUpdating = True
End Sub
 

Cengizhantr06

Altın Üye
Katılım
16 Mayıs 2020
Mesajlar
301
Excel Vers. ve Dili
Office 365 Türkçe
Altın Üyelik Bitiş Tarihi
18-05-2025
Aşağıdaki gibi olabilir ama verilerin çokluğuna göre işlem uzun sürebilir:

PHP:
Sub tarih()
Application.ScreenUpdating = False
    For i = 2 To Cells(Rows.Count, "C").End(3).Row
        If WorksheetFunction.Weekday(Cells(i, "C"), 2) < 6 Then
            Cells(i, "D") = Cells(i, "C")
        ElseIf WorksheetFunction.Weekday([C3], 2) = 6 Then
            Cells(i, "D") = Cells(i, "C") + 2
        Else
            Cells(i, "D") = Cells(i, "C") + 1
        End If
    Next
Application.ScreenUpdating = True
End Sub
yusuf bey çok tşesekür ederim sağolun cok işiniz rast gelsin hayırlı günler dilerim
 

Cengizhantr06

Altın Üye
Katılım
16 Mayıs 2020
Mesajlar
301
Excel Vers. ve Dili
Office 365 Türkçe
Altın Üyelik Bitiş Tarihi
18-05-2025
yusuf bey çok tesekkür ederim tam istediğim gibi oldu
 

Cengizhantr06

Altın Üye
Katılım
16 Mayıs 2020
Mesajlar
301
Excel Vers. ve Dili
Office 365 Türkçe
Altın Üyelik Bitiş Tarihi
18-05-2025
Aşağıdaki gibi olabilir ama verilerin çokluğuna göre işlem uzun sürebilir:

PHP:
Sub tarih()
Application.ScreenUpdating = False
    For i = 2 To Cells(Rows.Count, "C").End(3).Row
        If WorksheetFunction.Weekday(Cells(i, "C"), 2) < 6 Then
            Cells(i, "D") = Cells(i, "C")
        ElseIf WorksheetFunction.Weekday([C3], 2) = 6 Then
            Cells(i, "D") = Cells(i, "C") + 2
        Else
            Cells(i, "D") = Cells(i, "C") + 1
        End If
    Next
Application.ScreenUpdating = True
End Sub
yusuf bey size zahmet son bişey veri doğrulama hakkında sayfa2 de a1:a20 hücrelerinde veriler var bunları sayfa 1 de b2:b1000 arası her hücreye veri doğrulama nasıl yapabilirm
 

Cengizhantr06

Altın Üye
Katılım
16 Mayıs 2020
Mesajlar
301
Excel Vers. ve Dili
Office 365 Türkçe
Altın Üyelik Bitiş Tarihi
18-05-2025
Aşağıdaki gibi olabilir ama verilerin çokluğuna göre işlem uzun sürebilir:

PHP:
Sub tarih()
Application.ScreenUpdating = False
    For i = 2 To Cells(Rows.Count, "C").End(3).Row
        If WorksheetFunction.Weekday(Cells(i, "C"), 2) < 6 Then
            Cells(i, "D") = Cells(i, "C")
        ElseIf WorksheetFunction.Weekday([C3], 2) = 6 Then
            Cells(i, "D") = Cells(i, "C") + 2
        Else
            Cells(i, "D") = Cells(i, "C") + 1
        End If
    Next
Application.ScreenUpdating = True
End Sub
peki c hücresi boş ise bu kod çalısmasın onu nasıl yaparım lütfen ?
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
yusuf bey size zahmet son bişey veri doğrulama hakkında sayfa2 de a1:a20 hücrelerinde veriler var bunları sayfa 1 de b2:b1000 arası her hücreye veri doğrulama nasıl yapabilirm
Bunu manuel olarak yapamıyor musunuz?
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
peki c hücresi boş ise bu kod çalısmasın onu nasıl yaparım lütfen ?
Aşağıdaki gibi deneyin:

PHP:
Sub tarih()
Application.ScreenUpdating = False
    For i = 2 To Cells(Rows.Count, "C").End(3).Row
        If Cells(i, "C") <> "" Then
            If WorksheetFunction.Weekday(Cells(i, "C"), 2) < 6 Then
                Cells(i, "D") = Cells(i, "C")
            ElseIf WorksheetFunction.Weekday([C3], 2) = 6 Then
                Cells(i, "D") = Cells(i, "C") + 2
            Else
                Cells(i, "D") = Cells(i, "C") + 1
            End If
        End If
    Next
Application.ScreenUpdating = True
End Sub
 

Cengizhantr06

Altın Üye
Katılım
16 Mayıs 2020
Mesajlar
301
Excel Vers. ve Dili
Office 365 Türkçe
Altın Üyelik Bitiş Tarihi
18-05-2025
Bunu manuel olarak yapamıyor musunuz?
kod ile istiyorum yusuf bey şu oldu ama sayfa 2 deki a1 den 20 ye olan verileriden son 5 sini silsem mesala diğer tarafda veri doğrulamada boşluk oluşuyor o boşlugu nasıl kalırabiliriz
Sub VD()
Sayfa1.[b2:b1000].Validation.Delete
Sayfa1.[b2:b1000].Validation.Add Type:=xlValidateList, Formula1:="=Sayfa2!$A$1:$A$20"
End Sub
 

YUSUF44

Destek Ekibi
Destek Ekibi
Katılım
4 Ocak 2006
Mesajlar
12,073
Excel Vers. ve Dili
İş : Ofis 365 - Türkçe
Ev: Ofis 365 - Türkçe
A1:A20 aralığına dinamik ad tanımlaması yapabilirsiniz. bunun için dosya yapınızı görmek gerekir.
 

Cengizhantr06

Altın Üye
Katılım
16 Mayıs 2020
Mesajlar
301
Excel Vers. ve Dili
Office 365 Türkçe
Altın Üyelik Bitiş Tarihi
18-05-2025
A1:A20 aralığına dinamik ad tanımlaması yapabilirsiniz. bunun için dosya yapınızı görmek gerekir.
Bi deneyim öle olmassa dosya atayım cok tşk ederim
 
Üst