CDate, DateValue, atau TimeValue? Kenali Perbedaannya

Bayangkan ketika sedang membuat formulir input di VBA Excel. Pengguna mengetik "15/08/2026" ke dalam TextBox, kemudian aplikasi harus menghitung selisih hari, menentukan hari dalam seminggu, atau membandingkannya dengan tanggal lain.

Masalahnya, nilai yang berasal dari TextBox atau worksheet sering kali dianggap sebagai teks (String), bukan sebagai tanggal (Date). Jika langsung digunakan untuk perhitungan, kode dapat menghasilkan error atau memberikan hasil yang tidak sesuai.

Di sinilah fungsi CDate, DateValue, dan TimeValue berperan. Ketiganya sama-sama digunakan untuk melakukan konversi data, tetapi memiliki tujuan yang berbeda. Memahami perbedaan tersebut akan membantu Anda memilih fungsi yang paling sesuai dan menghindari kesalahan saat mengolah data tanggal maupun waktu.


Mengapa Perlu Melakukan Konversi?

Tidak semua data yang terlihat seperti tanggal benar-benar dikenali sebagai tipe Date oleh VBA.

Sebagai contoh, nilai berikut tampak seperti tanggal.

15/08/2026

Namun jika berasal dari TextBox, InputBox, file CSV, atau database, besar kemungkinan nilainya masih bertipe String.

Sebelum diproses menggunakan fungsi seperti DateDiff, DateAdd, atau Year, data tersebut sebaiknya dikonversi terlebih dahulu.


Mengenal Ketiga Fungsi Sekaligus

Meskipun sering digunakan dalam situasi yang hampir sama, ketiga fungsi ini memiliki peran yang berbeda.

FungsiFungsi UtamaHasil
CDate Mengonversi data menjadi tanggal dan/atau waktu Date
DateValue Mengambil bagian tanggal saja Date
TimeValue Mengambil bagian waktu saja Date (berisi waktu)

Cara paling mudah mengingatnya adalah:

  • CDate = Konversi semuanya

  • DateValue = Ambil tanggalnya

  • TimeValue = Ambil waktunya


1. Menggunakan Fungsi CDate

Jika Anda memiliki data yang berisi tanggal, waktu, atau kombinasi keduanya, gunakan CDate.

Sintaks:

CDate(Expression)

Contoh:

Sub ContohCDate()

    Dim Tanggal As Date

    Tanggal = CDate("15/08/2026")

    MsgBox Tanggal

End Sub

Hasilnya:

15/08/2026

CDate juga mampu mengonversi data yang mengandung tanggal sekaligus waktu.

CDate("15/08/2026 08:30:15")

Nilai yang dihasilkan tetap bertipe Date, sehingga seluruh informasi tanggal dan waktu tetap tersimpan.


Kapan Sebaiknya Menggunakan CDate?

Gunakan CDate apabila:

  • Data berasal dari TextBox.

  • Membaca data dari file CSV.

  • Mengambil data dari database.

  • Mengonversi hasil InputBox.

  • Data mengandung tanggal sekaligus waktu.

Dengan kata lain, CDate merupakan fungsi konversi yang paling fleksibel.


2. Menggunakan Fungsi DateValue

Berbeda dengan CDate, DateValue hanya mengambil bagian tanggal.

Sintaks:

DateValue(Expression)

Contoh:

Sub ContohDateValue()

    MsgBox DateValue("15/08/2026 14:35:20")

End Sub

Hasilnya:

15/08/2026

Perhatikan bahwa informasi jam 14:35:20 tidak ikut dikembalikan.


Kapan DateValue Lebih Tepat Digunakan?

DateValue sangat cocok apabila Anda:

  • hanya membutuhkan tanggal transaksi,

  • ingin membandingkan tanggal tanpa memperhatikan jam,

  • membuat laporan harian,

  • menghitung umur data.

Sebagai contoh:

If DateValue(Now) = Date Then

    MsgBox "Data dibuat hari ini."

End If

3. Menggunakan Fungsi TimeValue

Jika DateValue mengambil tanggal, maka TimeValue melakukan kebalikannya, yaitu mengambil bagian waktu.

Sintaks:

TimeValue(Expression)

Contoh:

Sub ContohTimeValue()

    MsgBox TimeValue("15/08/2026 14:35:20")

End Sub

Hasil:

14:35:20

Tanggal akan diabaikan, sedangkan informasi waktu tetap dipertahankan.


Kapan TimeValue Digunakan?

TimeValue biasanya digunakan ketika Anda ingin:

  • menghitung jam kerja,

  • membandingkan jam masuk,

  • membuat jadwal,

  • menentukan waktu pengingat,

  • mengolah data absensi.

Sebagai contoh:

If TimeValue(Now) > TimeSerial(17, 0, 0) Then

    MsgBox "Jam kerja telah berakhir."

End If

Mana yang Harus Dipilih?

Daripada menghafal, gunakan panduan sederhana berikut.

Gunakan CDate jika ingin mengonversi seluruh data menjadi tipe Date.

Gunakan DateValue jika hanya membutuhkan bagian tanggal.

Gunakan TimeValue jika hanya membutuhkan bagian waktu.

Dengan memahami prinsip tersebut, Anda akan lebih mudah menentukan fungsi yang tepat dalam berbagai situasi.


Studi Kasus: Memproses Input dari TextBox

Misalkan pengguna mengisi tanggal lahir melalui TextBox.

15/08/2000

Agar dapat dihitung menggunakan DateDiff, data harus dikonversi terlebih dahulu.

Dim TanggalLahir As Date

TanggalLahir = CDate(TextBox1.Value)

MsgBox DateDiff("yyyy", TanggalLahir, Date)

Tanpa proses konversi, VBA berpotensi menganggap nilai tersebut sebagai teks.


Studi Kasus: Mengabaikan Jam Saat Membandingkan Tanggal

Misalkan terdapat dua data berikut.

15/08/2026 08:00

15/08/2026 16:30

Secara waktu keduanya berbeda.

Namun jika yang dibandingkan hanya tanggalnya, gunakan DateValue.

If DateValue(A) = DateValue(B) Then

    MsgBox "Tanggal sama."

End If

Teknik ini sering digunakan pada aplikasi absensi maupun transaksi harian.


Tiga Kesalahan yang Sering Terjadi

Langsung Menggunakan Data TextBox

DateDiff("d", TextBox1.Value, Date)

Lebih aman:

DateDiff("d", CDate(TextBox1.Value), Date)

Menggunakan CDate Padahal Hanya Membutuhkan Tanggal

Jika waktu tidak diperlukan, DateValue lebih tepat dan membuat maksud kode menjadi lebih jelas.


Mengabaikan Format Regional

Format seperti:

01/02/2026

dapat berarti 1 Februari atau 2 Januari, tergantung pengaturan regional Windows.

Untuk menghindari ambiguitas, gunakan format yang konsisten atau bangun tanggal menggunakan DateSerial.


⚠️ Catatan Penting

CDate, DateValue, dan TimeValue akan menghasilkan error apabila data yang dikonversi bukan merupakan format tanggal atau waktu yang valid. Oleh karena itu, sebelum melakukan konversi, pertimbangkan untuk melakukan validasi menggunakan fungsi IsDate agar aplikasi menjadi lebih aman.


Ringkasan Cepat

Sebelum menutup artikel ini, berikut cara paling mudah mengingat fungsi-fungsi tersebut.

Jika ingin...Gunakan
Mengubah teks menjadi tanggal/waktu CDate
Mengambil tanggal saja DateValue
Mengambil waktu saja TimeValue

Memilih fungsi yang tepat tidak hanya membuat kode lebih mudah dipahami, tetapi juga membantu mengurangi potensi error saat aplikasi berkembang menjadi lebih kompleks.


FAQ

Apakah CDate bisa mengonversi tanggal sekaligus waktu?

Ya. Jika data mengandung tanggal dan waktu, keduanya akan dikonversi menjadi satu nilai bertipe Date.

Apakah DateValue menghapus informasi jam?

Ya. DateValue hanya mengambil bagian tanggal dan mengabaikan informasi waktu.

Kapan sebaiknya menggunakan TimeValue?

Gunakan ketika aplikasi hanya membutuhkan jam, menit, dan detik, misalnya pada sistem absensi atau penjadwalan.

Mengapa CDate menghasilkan error?

Biasanya karena data yang dikonversi tidak dikenali sebagai tanggal atau waktu yang valid. Untuk mencegahnya, lakukan pengecekan menggunakan fungsi IsDate sebelum memanggil CDate.

Hubungi Kami

Kantor Berkreasi
Alamat :
Pens Sky Venture - Sukolilo Surabaya
Karangrejo Tmur 17 Surabaya

Email : kantor.berkreasi@gmail.com
WA : wa.me/6287761589881  
(Support  Mbak Ana)

Tim Pengembang

Dr. Rojabi Azharghany, M.Si, S.Sos
Dr. H. Agus Sulthoni Imami, S.Psi. M.Pd.I.
Ali Ishaq, M.Pd.
Didik Rahwiniyanto, S.Si., M.Pd.
Mujiburrohman, M.Pd.
Mohammad Zikky, S.ST, M.T
Amien sawedi, S.Pd.
Didik P Wicaksono, M.Pd.