Soru Makro ile saatleri olan kutucuklar x koyma (24 saat sorunu)

bthn35

Altın Üye
Katılım
12 Kasım 2009
Mesajlar
192
Excel Vers. ve Dili
365 ProPlus TR
Altın Üyelik Bitiş Tarihi
17-11-2026
Merhaba,
Aşağıdaki makroyu kullanıyorum ancak bugün bir sorunla karşılaştım, saat sütununda (D sütünu) 16 - 24. gibi 24 yazdığında makro hata veriyor. Bunun için makroya ne eklemeliyim?


Kod:
Sub Saat()
    Dim i, ii, a, bl, s1, s2, bas, son
Dim n, y As Variant
    With CreateObject("VbScript.Regexp")
        .Pattern = "([\d:\s]+)-([\d:\s]+)"
        For i = 8 To Cells(Rows.Count, "D").End(3).Row
            If .test(Cells(i, "D").Value) Then
           
            y = Split(Cells(i, "D").Value, "+")
            For n = 1 To UBound(y) + 1
           
                 Set a = .Execute(Trim(y(n - 1)))
                bl = Split(a(0), "-")
                s1 = Trim(bl(0))
                If InStr(s1, ":") = 0 Then s1 = s1 & ":00"
                s2 = Trim(bl(1))
                If InStr(s2, ":") = 0 Then s2 = s2 & ":00"
                bas = Hour(s1) * 2 + IIf(Minute(s1) = 30, 1, 0) - 7
                son = Hour(s2) * 2 + IIf(Minute(s2) = 30, 0, -1) - 7
               
                For ii = bas To son
                    Cells(i, ii).Value = "x"
                Next ii
                Next n
            End If
        Next i
    End With

End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,228
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Merhaba,

Normalde 24:00 diye bir saat yoktur. Bunun yerine 00:00 olarak kullanmanız gerekir.

Kodlarınızda saatin önüne günü de eklerseniz daha sağlıklı sonuçlar alırsınız. Örnek olarak aşağıdaki gibi kurgulamanız gerekir.

18.04.2023 16:00:00
19.04.2023 00:00:00
 

bthn35

Altın Üye
Katılım
12 Kasım 2009
Mesajlar
192
Excel Vers. ve Dili
365 ProPlus TR
Altın Üyelik Bitiş Tarihi
17-11-2026
Aşağıdaki kodlar çözdüm sorunu, teşekkür ederim.

Kod:
bas = Split(s1, ":")(0) * 2 + IIf(Val(Split(s1, ":")(1)) = 30, 1, 0) - 6
son = Split(s2, ":")(0) * 2 + IIf(Val(Split(s2, ":")(1)) = 30, 0, -1) - 6
 
Üst