Özellik ikonu

CDate

İndirme izni yok

Genel Bakış

CDate (Convert to Date), geçerli bir tarih ya da saat ifadesini Date veri türüne dönüştüren VBA tür dönüştürme işlevidir. Hücrede metin olarak duran tarihleri, seri sayıları ve saat ifadelerini gerçek tarih değerine çevirmek için kullanılır. Böylece tarihlerle toplama, çıkarma ve karşılaştırma gibi işlemleri güvenle yapabilirsiniz.

Söz dizimi​

CDate işlevinin söz dizimi aşağıdadır:
VBA
CDate(ifade)
  • ifade: Zorunlu. Tarih ve/veya saate dönüştürülecek dizgi ifadesi, sayısal ifade ya da tarih değeri. İsteğe bağlı başka parametre yoktur, dolayısıyla varsayılan değer de yoktur.
İşlev sonucu Date türünde bir değer olarak döndürür. Bu değeri doğrudan bir Date değişkenine atayabilir ya da bir hücreye yazabilirsiniz.

Neleri dönüştürür, ne döndürür​

CDate aşağıdaki girdileri kabul eder:
  • Tarih metni: "2024-03-15" ya da bölgesel ayarlarınıza uygun "15.03.2024" gibi metinler. Ay adı içeren metinler de (ör. "15 Mart 2024") bölgesel ayarlar tanıyorsa çevrilir.
  • Saat metni: "14:30" gibi ifadeler. Tarih kısmı verilmezse sonuç yalnızca saat bilgisi taşır.
  • Sayı: Sayının tam kısmı gün, ondalık kısmı günün saatini belirtir. Örneğin 0,5 öğlen 12:00'dir.
  • Date değeri: Zaten tarih olan değer olduğu gibi korunur.
VBA'da seri değer 0, 30 Aralık 1899'a karşılık gelir. Excel çalışma sayfasındaki seri değerler 1 Mart 1900 ve sonrası için VBA ile aynıdır; bu yüzden güncel tarihlerde sayfadaki seri sayıyı doğrudan CDate ile çevirebilirsiniz. Desteklenen aralık 1 Ocak 100 ile 31 Aralık 9999 arasıdır.

Bölgesel ayarlar ve hatalar​

CDate, metni Windows bölgesel ayarlarına göre yorumlar. "03/04/2024" gibi bir metin bir bilgisayarda 3 Nisan, başka bir bilgisayarda 4 Mart olarak okunabilir. Bu belirsizliği önlemek için yıl-ay-gün sırasındaki "2024-03-15" biçimini ya da DateSerial işlevini tercih edin.
  • Geçersiz ifade: "Beklemede", boş metin ya da "2024-02-30" gibi var olmayan bir tarih, Çalışma zamanı hatası 13 (Tür uyuşmazlığı) üretir.
  • Null değeri: Null verilirse Çalışma zamanı hatası 94 (Null kullanımı geçersiz) oluşur.
  • Önlem: Dönüştürmeden önce IsDate ile denetleyin ya da On Error ile hatayı yakalayın.

1. Metin tarihleri gerçek tarihe çevirme​

B sütunundaki metin tarihler, C sütununa gerçek tarih olarak yazılır. Dönüştürülemeyen değerler için C sütununa HATA yazılır. Kodu Ekle > Modül (Insert > Module) ile açılan standart modüle yapıştırın ve örnek sayfa etkinken çalıştırın.
VBA 21 satır
Option Explicit

' Metin olarak yazılmış tarihleri gerçek tarih değerine çevirir
Sub MetniTarihYap()
    Dim ws As Worksheet
    Dim satir As Long
    Dim metin As Variant

    Set ws = ActiveSheet

    For satir = 2 To 7
        metin = ws.Cells(satir, 2).Value
        ' IsDate, CDate'in hata vermeden çevirebileceği değerleri ayırır
        If IsDate(metin) Then
            ws.Cells(satir, 3).Value = CDate(metin)
            ws.Cells(satir, 3).NumberFormat = "dd.mm.yyyy"
        Else
            ws.Cells(satir, 3).Value = "HATA"
        End If
    Next satir
End Sub
CDate
Formülünü incelemek için bir hücre seçin.
ABC
1Sipariş NoTarih MetniTarih
2SP-10012024-03-1515.03.2024
3SP-10022024-04-0202.04.2024
4SP-10032024-12-2525.12.2024
5SP-1004BeklemedeHATA
6SP-10052024-02-30HATA
7SP-10062025-01-1010.01.2025
Metin TarihExcelDepo v1.0.0
Makro çalıştıktan sonra C2 hücresinde 15.03.2024, C3 hücresinde 02.04.2024 ve C7 hücresinde 10.01.2025 görünür; bunlar artık metin değil, gerçek tarih değerleridir. "Beklemede" bir tarih olmadığı için C5 hücresine HATA, 30 Şubat diye bir gün bulunmadığı için C6 hücresine HATA yazılır. IsDate denetimi sayesinde makro hata vermeden sonuna kadar çalışır.

2. Seri değerleri tarih ve saate çevirme​

B sütunundaki sayılar, Excel'in iç seri değerleridir. Tam kısım günü, ondalık kısım saati gösterir. Makro her sayıyı CDate ile çevirip C sütununa tarih ve saat olarak, D sütununa ise ay numarası olarak yazar. Kodu standart modüle yapıştırın.
VBA 18 satır
Option Explicit

' Seri değerleri Date türüne çevirir, tarih-saat ve ay numarasını yazar
Sub SeriDegerleriCevir()
    Dim ws As Worksheet
    Dim satir As Long
    Dim d As Date

    Set ws = ActiveSheet

    For satir = 2 To 6
        ' Sayının tam kısmı gün, ondalık kısmı saat olarak yorumlanır
        d = CDate(ws.Cells(satir, 2).Value)
        ws.Cells(satir, 3).Value = d
        ws.Cells(satir, 3).NumberFormat = "dd.mm.yyyy hh:mm"
        ws.Cells(satir, 4).Value = Month(d)
    Next satir
End Sub
CDate
Formülünü incelemek için bir hücre seçin.
ABCD
1KayıtSeri DeğerTarih ve SaatAy No
2K-014529201.01.2024 00:001
3K-0245366,515.03.2024 12:003
4K-0345500,2527.07.2024 06:007
5K-0445657,7531.12.2024 18:0012
6K-054500015.03.2023 00:003
Seri DeğerlerExcelDepo v1.0.0
B2 hücresindeki tam sayı yalnızca günü belirttiği için C2 hücresi 01.01.2024 00:00 olarak görünür ve saat kısmı 00:00 kalır. B3 hücresindeki ondalık kısım saati verdiğinden C3 hücresinde 15.03.2024 12:00 elde edilir. Aynı mantıkla C4 hücresi 27.07.2024 06:00, C5 hücresi 31.12.2024 18:00 değerini alır. D sütunundaki ay numaraları, örneğin D2 için 1, dönüştürülen Date değerinden Month işleviyle alınmıştır.

3. Hata yakalayan vade hesabı​

Fatura tarihleri metin olarak tutulmaktadır. Makro her tarihi CDate ile çevirip vade gününü ekler ve D sütununa vade tarihini yazar. Dönüştürme işlemi, On Error ile korunan ayrı bir işlevde yapılır; böylece bozuk bir tarih tüm makroyu durdurmaz. Her iki yordamı da aynı standart modüle yapıştırın.
VBA 30 satır
Option Explicit

' CDate hata verirse HATA metni döndüren güvenli dönüştürücü
Function GuvenliTarih(ByVal deger As Variant) As Variant
    On Error GoTo Hata
    GuvenliTarih = CDate(deger)
    Exit Function
Hata:
    GuvenliTarih = "HATA"
End Function

' Fatura tarihine vade gününü ekleyerek vade tarihini bulur
Sub VadeHesapla()
    Dim ws As Worksheet
    Dim satir As Long
    Dim sonuc As Variant

    Set ws = ActiveSheet

    For satir = 2 To 6
        sonuc = GuvenliTarih(ws.Cells(satir, 2).Value)
        If IsDate(sonuc) Then
            ' Tarih + gün sayısı, yine bir tarih verir
            ws.Cells(satir, 4).Value = CDate(sonuc) + ws.Cells(satir, 3).Value
            ws.Cells(satir, 4).NumberFormat = "dd.mm.yyyy"
        Else
            ws.Cells(satir, 4).Value = "HATA"
        End If
    Next satir
End Sub
CDate
Formülünü incelemek için bir hücre seçin.
ABCD
1Fatura NoFatura TarihiVade (Gün)Vade Tarihi
2FT-2012024-01-153014.02.2024
3FT-2022024-02-104526.03.2024
4FT-2032024-03-056004.05.2024
5FT-204tarih yok30HATA
6FT-2052024-06-201505.07.2024
Vade HesabıExcelDepo v1.0.0
FT-201 faturası için vade tarihi D2 hücresinde 14.02.2024, FT-202 için D3 hücresinde 26.03.2024, FT-203 için D4 hücresinde 04.05.2024 olarak hesaplanır. B5 hücresindeki "tarih yok" metni CDate ile çevrilemez; GuvenliTarih işlevi hatayı yakalar ve D5 hücresine HATA yazılır. Makro bu satırda durmaz, sonraki faturalara devam eder; D6 hücresi 05.07.2024 değerini alır.

Kullanırken dikkat edin​

  • Önce IsDate ile denetleyin: Kullanıcıdan ya da dış kaynaktan gelen verilerde CDate doğrudan çağrılırsa tek bir bozuk hücre makroyu Tür uyuşmazlığı hatasıyla durdurur. IsDate ile denetleyin ya da dönüştürmeyi On Error ile korunan bir işleve alın.
  • Belirsiz tarih biçimlerinden kaçının: "03/04/2024" gibi metinlerin gün mü ay mı olduğu bilgisayarın bölgesel ayarlarına bağlıdır. Dosyanız farklı ayarlı bilgisayarlarda kullanılacaksa yıl-ay-gün sırasındaki "2024-04-03" biçimini ya da DateSerial işlevini kullanın.
  • Saat bilgisi korunur: CDate metindeki ya da sayıdaki saat kısmını da korur. Yalnızca gün gerekiyorsa sonucu Int işleviyle tamsayıya indirin ya da DateValue kullanın. Saat verilmeyen değerlerde saat 00:00 olur.
  • Hücre biçimini ayarlayın: Bir Date değerini hücreye yazdığınızda Excel çoğu zaman tarih biçimi uygular; yine de görünümü kontrol altında tutmak için NumberFormat özelliğini kendiniz atayın. Biçim uygulanmayan hücrede tarih seri sayı olarak görünebilir.
  • Value ve Value2 farkı: Tarih biçimli bir hücrenin Value özelliği Date türünde, Value2 özelliği ise seri sayı (Double) olarak değer verir. CDate iki durumda da doğru sonucu üretir.
  • Null ve boş metin: Null değeri hata 94, boş metin ("") ise hata 13 üretir. Boş hücreleri ayrıca denetleyin; boş hücrenin Value değeri Empty olduğu için dönüşüm 00:00:00 saatini döndürür ve bu çoğu zaman istenmez.
  • İlgili konular:
    • IsDate: Bir ifadenin tarihe çevrilip çevrilemeyeceğini denetler.
    • DateValue ve TimeValue: Metnin yalnızca tarih ya da yalnızca saat kısmını döndürür.
    • DateSerial ve TimeSerial: Yıl, ay, gün (ya da saat, dakika, saniye) değerlerinden belirsizlik olmadan tarih ve saat üretir.
    • CStr, CLng, CDbl: Diğer tür dönüştürme işlevleri.
    • Format: Tarihi metin olarak biçimlendirir.
    • TARİHSAYISI, ZAMANSAYISI ve TARİH: Çalışma sayfasındaki karşılık gelen işlevler.
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
13
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst