• DİKKAT

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

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

Katılım
16 Mayıs 2020
Mesajlar
327
Excel Vers. ve Dili
Office 365 Türkçe
=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
 
Siz c hücresine yazdığınız tarihin, d hücresinde haftanın hangi günü olduğunu mu yazdırmak istiyorsunuz?
 
=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?
 
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
 
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
 
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 ?
 
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
 
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
 
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
 
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 ?
 
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?
 
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
 
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
 
A1:A20 aralığına dinamik ad tanımlaması yapabilirsiniz. bunun için dosya yapınızı görmek gerekir.
 
Geri
Üst