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.
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.
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.
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.
Söz dizimi
CDate işlevinin söz dizimi aşağıdadır: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.
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.
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.| A | B | C | |
|---|---|---|---|
| 1 | Sipariş No | Tarih Metni | Tarih |
| 2 | SP-1001 | 2024-03-15 | 15.03.2024 |
| 3 | SP-1002 | 2024-04-02 | 02.04.2024 |
| 4 | SP-1003 | 2024-12-25 | 25.12.2024 |
| 5 | SP-1004 | Beklemede | HATA |
| 6 | SP-1005 | 2024-02-30 | HATA |
| 7 | SP-1006 | 2025-01-10 | 10.01.2025 |
Metin TarihExcelDepo v1.0.0
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.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Kayıt | Seri Değer | Tarih ve Saat | Ay No |
| 2 | K-01 | 45292 | 01.01.2024 00:00 | 1 |
| 3 | K-02 | 45366,5 | 15.03.2024 12:00 | 3 |
| 4 | K-03 | 45500,25 | 27.07.2024 06:00 | 7 |
| 5 | K-04 | 45657,75 | 31.12.2024 18:00 | 12 |
| 6 | K-05 | 45000 | 15.03.2023 00:00 | 3 |
Seri DeğerlerExcelDepo v1.0.0
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.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Fatura No | Fatura Tarihi | Vade (Gün) | Vade Tarihi |
| 2 | FT-201 | 2024-01-15 | 30 | 14.02.2024 |
| 3 | FT-202 | 2024-02-10 | 45 | 26.03.2024 |
| 4 | FT-203 | 2024-03-05 | 60 | 04.05.2024 |
| 5 | FT-204 | tarih yok | 30 | HATA |
| 6 | FT-205 | 2024-06-20 | 15 | 05.07.2024 |
Vade HesabıExcelDepo v1.0.0
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.