Saati Düzenleme

Katılım
7 Şubat 2021
Mesajlar
448
Excel Vers. ve Dili
2010, Türkiye
İyi günler;
Ekli örnek dosyada Veri Sayfasında E11:F41 hücre aralığına saati aşağıdaki gibi i girdiğim zaman otomatik olarak düzeltmek mümkün müdür?
Örneğin
08,00 yazdığım zaman 08:00
08.00
yazdığım zaman 08:00
08,
yazdığım zaman 08:00
08.
yazdığım zaman 08:00

 
Katılım
7 Şubat 2021
Mesajlar
448
Excel Vers. ve Dili
2010, Türkiye
Hocam öncelikle teşekkür ederim. Sizden ricam kodları yada dosyayı link olarak paylaşabilir misiniz?
 

Mdemir63

Altın Üye
Katılım
7 Temmuz 2006
Mesajlar
2,862
Excel Vers. ve Dili
Ofis2010 32Bit Türkçe
Altın Üyelik Bitiş Tarihi
19-02-2026
Katılım
7 Şubat 2021
Mesajlar
448
Excel Vers. ve Dili
2010, Türkiye
Hocam buton olmadan bunu yapabilir miyiz. Yani E11:F41 hücre aralığına yukarıda bahsettiğim şekilde girdiğim zaman anlık saate çevirecek
 
Katılım
10 Mart 2013
Mesajlar
187
Excel Vers. ve Dili
2016 - İngilizce
Altın Üyelik Bitiş Tarihi
29.05.2018
Merhaba

Bu otomatik düzeltmeyi gerçekleştirmek için Excel'de bir formül kullanabilirsiniz. Aşağıdaki adımları takip edebilirsiniz:
  1. Gerekli hücrelere 08,00 gibi saat değerlerini girin.
  2. Boş bir hücrede, aşağıdaki formülü girin:
=IFERROR(TEXT(TIMEVALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(E11,".",":"),",",":")," ","")+":00"), "hh:mm"),"")

Bu formülde, E11 hücresindeki değer, nokta ve virgül işaretlerinin yerine iki nokta işaretiyle değiştirilir. Böylece, "08.00" veya "08,00" gibi değerler "08:00" olarak düzeltilir. Daha sonra, TIMEVALUE ve TEXT işlevleri kullanarak, bu değer bir zaman değerine dönüştürülür ve "hh:mm" biçiminde biçimlendirilir. 3. Bu formülü girdiğiniz hücrenin altındaki tüm hücrelere bu formülü uygulayın. Böylece, hücrelerdeki değerler otomatik olarak düzeltilecektir.
Bu yöntemle, belirli saat formatlarının otomatik olarak düzeltilmesini sağlayabilirsiniz. Ancak, saat formatları farklıysa, formülde bazı değişiklikler yapmanız gerekebilir.
 
Katılım
7 Şubat 2021
Mesajlar
448
Excel Vers. ve Dili
2010, Türkiye
Korhan bey link ekleyebilir misiniz
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,246
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bir önceki mesajıma harici link ekledim.
 
Katılım
7 Şubat 2021
Mesajlar
448
Excel Vers. ve Dili
2010, Türkiye
Korhan bey asıl dosyamda veri doğrulama şeklinde kullanıyordum. Benim istediğim yanlışlıkla saati 08,00-08, -08.15- 08,15 gibi girdiğim zaman yani aşağıdaki şekilde makro ile düzeltilmesi idi
08,00=08:00
08,=08:00
08.=08:00
08.00=08:00
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,246
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Ben size en pratik olan yöntemi önerdim. Bu yöntem sizin yanlış veri girişinizi engeller ve sizi doğru veri girişine zorlar.

Excelde boş bir hücrede sizin dediğiniz tarzda veri girişi yaptığınızda aşağıdaki görseller oluşur.

08,00 = 8
08, = 8
08. = 08.
08.00 = 08:00
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,246
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Yine de makro ile yapmak istiyorsanız aşağıdaki kodu denersiniz.

Harici Link (Silinebilir) ; https://dosya.co/ib306wxqas4t/Saat_Biçimlendirme.xlsm.html

C++:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Rng As Range
    On Error GoTo Safe_Exit
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    For Each Rng In Intersect(Target, Range("E11:F41"))
        If Rng <> "" Then
            Select Case True
                Case Len(Rng) > 4 And (Not Rng Like "*[.,:]*")
                    GoTo Alert
                Case Not IsNumeric(Rng) And (Not Rng Like "*[.,:]*")
                    GoTo Alert
                Case Len(Rng) = 1
                    If Not IsNumeric(Rng) Then GoTo Alert
                    Rng.NumberFormat = "hh:mm;@"
                    Rng = CDate(Rng & ":00")
                Case Len(Rng) = 2
                    If Val(Left(Rng, 2)) > 23 Or Not IsNumeric(Right(Rng, 1)) Then GoTo Alert
                    Rng.NumberFormat = "hh:mm;@"
                    Rng = CDate(Rng & ":00")
                Case (Rng Like "??.")
                    If Val(Left(Rng, 2)) > 23 Then GoTo Alert
                    Rng.Replace ".", ":"
                    Rng.NumberFormat = "hh:mm;@"
                    Rng = CDate(Rng & "00")
                Case (Rng Like "??,")
                    If Val(Left(Rng, 2)) > 23 Then GoTo Alert
                    Rng.Replace ",", ":"
                    Rng.NumberFormat = "hh:mm;@"
                    Rng = CDate(Rng & "00")
                Case (Rng Like "??:")
                    If Val(Left(Rng, 2)) > 23 Then GoTo Alert
                    Rng.NumberFormat = "hh:mm;@"
                    Rng = CDate(Rng & "00")
                Case (Rng Like "??.??")
                    If Val(Left(Rng, 2)) > 23 Or Val(Right(Rng, 2)) > 59 Then GoTo Alert
                    Rng.NumberFormat = "hh:mm;@"
                    Rng.Replace ".", ":"
                Case (Rng Like "??,??")
                    If Val(Left(Rng, 2)) > 23 Or Val(Right(Rng, 2)) > 59 Then GoTo Alert
                    Rng.NumberFormat = "hh:mm;@"
                    Rng.Replace ",", ":"
                Case (Rng Like "??:??")
                    If Val(Left(Rng, 2)) > 23 Or Val(Right(Rng, 2)) > 59 Then GoTo Alert
                    Rng.NumberFormat = "hh:mm;@"
                    Rng.Replace ":", ":"
                Case Len(Rng) = 3 And (Not Rng Like "*:*")
                    If Val(Left(Rng, 2)) > 23 Then GoTo Alert
                    Rng.NumberFormat = "hh:mm;@"
                    Rng = CDate(Left(Rng, 1) & ":" & Right(Rng, 2))
                Case Len(Rng) = 4 And (Not Rng Like "*:*")
                    If Val(Left(Rng, 2)) > 23 Or Val(Right(Rng, 2)) > 59 Then GoTo Alert
                    Rng.NumberFormat = "hh:mm;@"
                    Rng = CDate(Left(Rng, 2) & ":" & Right(Rng, 2))
                Case IsNumeric(Rng)
                    Rng.NumberFormat = "hh:mm;@"
                    Rng = CDate(Rng)
                Case Else
Alert:              MsgBox "Lütfen saat formatında veri girişi yapınız!", vbCritical, "Hatalı Veri Girişi"
                    Application.Undo
            End Select
        Else
            Rng.NumberFormat = "@"
        End If
    Next
Safe_Exit:
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Target, Range("E11:F41")) Is Nothing Then Exit Sub
    If IsEmpty(Target) Then Target.NumberFormat = "@"
End Sub
 

Ekli dosyalar

Katılım
7 Şubat 2021
Mesajlar
448
Excel Vers. ve Dili
2010, Türkiye
Korhan bey kodlar istediğim gibi çalışmadı. Yine de ilginiz için çok teşekkür ederim
 

Mdemir63

Altın Üye
Katılım
7 Temmuz 2006
Mesajlar
2,862
Excel Vers. ve Dili
Ofis2010 32Bit Türkçe
Altın Üyelik Bitiş Tarihi
19-02-2026
Selamlar

Sayın @Hsn55 bende Korhan Hocamın kodlarını denedim . Bende çalıştı
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,246
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Küçük bir revize yaptım. Tekrar deneyiniz.
 
Katılım
7 Şubat 2021
Mesajlar
448
Excel Vers. ve Dili
2010, Türkiye
Korhan bey yine aynı hücreleri sildiğimde tüm hücreler 00:00 şeklinde oluyor.
Örneğin 08.10 yazdığımda 810:00 oluyor
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,246
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bu sebeple size ilk dosyayı önermiştim. Neresinden tutarsanız gördüğünüz gibi bozuluyor.

Belki ilgili alan METİN olarak biçimlendirilirse daha sağlıklı sonuçlar alınabilir.
 
Katılım
7 Şubat 2021
Mesajlar
448
Excel Vers. ve Dili
2010, Türkiye
Metin olarak ta denedim . Sonuç aynı
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,246
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Sayıya göre kurguladığım için sorun oluyor.

Çözüm bulursam paylaşırım.
 
Katılım
7 Şubat 2021
Mesajlar
448
Excel Vers. ve Dili
2010, Türkiye
Çok teşekkür ederim. İyi akşamlar
 
Üst