• DİKKAT

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

tarih formatı

Katılım
24 Şubat 2009
Mesajlar
1,077
Excel Vers. ve Dili
2016
arkadaşlar girilen A1 hücresine 01012011 yazdıığımda bu hücreden çıkınca koşullu biçimlendirme ile 01.01.2011 yazmasını istiyorum, yanlış olunca da uyarsın girilen değer tarih değil gibi yani 01132011 yazılınca
 
Bu şekilde dener misiniz ?
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target = "" Then Exit Sub
    If Target.Address <> "$A$1" Then Exit Sub
    a = Replace(Target.Text, ".", "")
    If Val(Left(a, 2)) < 1 Or Val(Left(a, 2)) > 31 Then
        MsgBox "Giriş Hatalı": [a1].Clear: Exit Sub
    ElseIf Len(Replace(a, ".", "")) <> 8 Then
        MsgBox "Giriş Hatalı":  [a1].Clear: Exit Sub
    ElseIf Mid(a, 3, 2) < 1 Or Mid(a, 3, 2) > 12 Then
        MsgBox "Giriş Hatalı":  [a1].Clear: Exit Sub
    Else
        Target = Left(a, 2) & "." & Mid(a, 3, 2) & "." & Right(a, 4)
    End If
End Sub
 
Hamitcan bey; bunu denedim olmadı, çok farklı bir tarih çıktı. birde bu kodu vba'nın ThisWoorkbook sayfasına mı kopyalayacağım, birde sadece A1 hücresi için olmayacak onun devamı içinde olacak; a1, a2, a3... gibi yani a sütununa 01012011 yazılınca tarihe dönücecek yani 01.01.2011 olacak bunlar birer tarih formatı olacak,
 
Merhaba,

Sanırım tarih girişinin zorluğundan olsa gerek böyle bir kod önerisinde bulundunuz. Aslında tarihi noktalı yazmak yerine aşağıdaki formatlarda giriş yaparsanız makroya gerek kalmaz ama illa makro isterseniz kodları deneyin.

Tarih Girişi :

g-a-y
g/a-y

gibi girişlerde otomatik tarihe dönüşür.

Yani :

1/1/11 ---> 01.01.2011
1/1-11 ---> 01.01.2011
1-1-11 ---> 01.01.2011

1/1/85 ---> 01.01.1985
1/1-85 ---> 01.01.1985
1-1-85 ---> 01.01.1985

şeklinde girebilirsiniz. Burada dikkat ederseniz gün ve ayların ilk basamakları 0 (Sıfır) ise yazmak zorunda değilsiniz.



Aşağıdaki kodlar ilgili sayfanın kod bölümünde olmalı ve A sütunu için geçerlidir.

1. satır başlık olabileceği için 1. satırda çalışmaz.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Sonuc   As Boolean, _
    Gun     As Integer, _
    Ay      As Integer, _
    Yil     As Long, _
    Aylar
    Aylar = Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

If Intersect(Target, [A:A]) Is Nothing Then Exit Sub
If Target.Row < 2 Then Exit Sub
Application.EnableEvents = False
Sonuc = True
If Len(Target) > 8 Then
    MsgBox "Çok uzun tarih girişi"
ElseIf Len(Target) < 7 Then
    MsgBox "Çok kısa tarih girişi"
ElseIf Len(Target) = 8 Then
    Yil = Right(Target.Value, 4)
    Ay = Mid(Target.Value, 3, 2)
    Gun = Left(Target.Value, 2)
Else
    Yil = Right(Target.Value, 4)
    Ay = Mid(Target.Value, 2, 2)
    Gun = Left(Target.Value, 1)
End If
If Gun = 0 Or Gun > Aylar(Ay) Then Sonuc = False
If Ay = 0 Or Ay > 12 Then Sonuc = False
If Ay = 2 And Gun > Aylar(Ay) Then Sonuc = False
If Sonuc = False Then
    Target.Offset(0, 0).Select
    Target.Value = ""
Else
    Target = DateSerial(Yil, Ay, Gun)
End If
Application.EnableEvents = True
End Sub

Not : Yıla göre Şubat ayının 28 yada 29 çekmesi kontrol edilmemiştir, doğrudan 28 den büyük olması kontrol edilmiştir. Kısaca eksik durum.
Hücrenin silinmesinde de kontrol yapılmamıştır.
Oysa ilk açıklamamdaki giriş yeğlendiğinde yanlış tarih metin formatında olur ve sola dayalı görülür buradan anlaşılır yanlış tarih girişi olduğu.
 

Ekli dosyalar

Hücre Biçimlendir > İsteğe Uyarlanmış > 00\.00\.0000
Tarih yazarken, rakamlar arasına nokta koymadan otomatik yazılır.
 
Merhaba arkadaşlarYukarda açıklanan tarih formatı gibi saat formatınıda yapmak istiyorum.
Yani A1 hücresine 19 yazınca hücreden çıkınca 19.00 yazmasını istiyorum. Teşekkürler.
 
Geri
Üst