Cara Menghitung Umur di Excel dari Tanggal Lahir, Diuji pada 50 Data

Teman saya mau buka klinik. Dia pesan ke saya untuk dibuatkan rumus Excel yang menghitung umur pasien dari tanggal lahir. Yang dia mau bukan cuma angka tahun, tapi umur lengkap seperti di kartu pasien: sekian tahun, sekian bulan, sekian hari.

Sebelum rumus dan formatnya saya berikan padanya, saya mau rumus itu diuji dulu untuk semua jenis pasien. Bayi yang lahir hari ini, anak yang lahir 29 Februari, sampai lansia umur 70 tahun lebih. Jadi saya siapkan 50 tanggal lahir buatan, lalu saya uji empat rumus sekaligus di Excel laptop saya.

Pembahasan cara menghitung umur di Excel ini akan saya mulai dari data yang diuji, lalu rumus umur tahun, umur lengkap, serta jebakan yang baru saya ketahui setelah uji coba dilakukan, dan terakhir susunan kolom dan format yang saya sarankan untuk klinik tersebut.

Proses ujinya saya rekam juga, dari mengisi rumus sampai tiga aturan wajib di bagian akhirnya:

Data uji: 50 tanggal lahir buatan

Semua nama di data ini buatan saya, bukan pasien sungguhan. Tanggal acuannya saya taruh di sel B1, yaitu 6 November 2026. Tanggal lahir ada di kolom D, mulai baris 4 sampai baris 53.

Isinya sengaja saya campur dengan kasus rancu yang biasanya membuat rumus tanggal salah seperti di bawah ini:

Jenis dataJumlahContoh
Kasus khusus8Lahir di tanggal acuan, lahir 29 Februari, lahir tanggal 31, ulang tahun tepat hari ini
Balita36Umur 0 sampai 5 tahun
Lansia5Umur 70 sampai 78 tahun
Tanggal tersimpan sebagai teks112/03/2024

Excel di laptop saya memakai titik koma sebagai pemisah rumus, karena pengaturan wilayah Windows-nya Indonesia. Kalau Excel Anda memakai koma, ganti saja setiap ; di rumus artikel ini dengan ,.

Rumus umur dalam tahun

Rumus pertama yang saya gunakan hanya menghitung umur dalam tahun penuh:

=DATEDIF(D4;$B$1;"Y")

D4 adalah tanggal lahir, B1 tanggal acuan, dan huruf Y artinya tahun. B1 saya kunci dengan tanda dolar supaya tidak ikut bergeser saat rumusnya disalin ke 50 baris di bawahnya.

Mungkin Anda bertanya, kenapa tidak tahun sekarang dikurangi tahun lahir saja? Jawabannya ada di baris anak yang lahir 30 November 2021. Kalau tahunnya dikurangi, hasilnya 5. Padahal di tanggal acuan dia belum ulang tahun, jadi umurnya masih 4. DATEDIF menghitung tahun yang sudah lewat penuh, bukan selisih angka tahunnya.

Satu hal yang perlu Anda tahu, menurut halaman resmi Microsoft tentang DATEDIF, fungsi ini disediakan untuk menjaga kecocokan dengan buku kerja lama dari Lotus 1-2-3. Microsoft juga menulis bahwa DATEDIF bisa memberi hasil yang tidak benar di skenario tertentu. Hal ini juga saya uji coba di bawah.

Rumus umur lengkap: tahun, bulan, dan hari

Untuk umur seperti di kartu pasien, DATEDIF dipanggil tiga kali lalu hasilnya disambung dengan tanda &:

=DATEDIF(D4;$B$1;"Y")&" tahun "&DATEDIF(D4;$B$1;"YM")&" bulan "&DATEDIF(D4;$B$1;"MD")&" hari"

YM adalah sisa bulan setelah tahun penuh. MD adalah sisa hari setelah bulan penuh. Kalau menurut saya, rumus inilah yang paling enak dibaca petugas pendaftaran.

Hasil rumus DATEDIF umur tahun dan umur lengkap tahun bulan hari, termasuk lahir 29 Februari 2024 yang hasilnya 2 tahun 8 bulan 8 hari
Baris yang kotaknya ada kursor hijau adalah anak yang lahir 29 Februari 2024.

Yang lahir 29 Februari 2024 hasilnya 2 tahun 8 bulan 8 hari. Bayi yang lahir tepat di tanggal acuan hasilnya 0 tahun 0 bulan 0 hari, tidak error. Anak yang ulang tahun tepat hari itu juga keluar bulat, 3 tahun 0 bulan 0 hari.

Apakah DATEDIF hasilnya tepat? Saya bandingkan dengan YEARFRAC

Karena ada peringatan dari Microsoft tadi, saya coba cek dengan rumus lain:

=INT(YEARFRAC(D4;$B$1;1))

YEARFRAC menghitung umur dalam pecahan tahun, misalnya 4,93. Angka 1 di belakang artinya memakai jumlah hari sebenarnya setiap tahun, termasuk tahun kabisat. INT membuang angka di belakang koma, jadi yang tersisa umur tahun penuh.

Lalu di kolom terakhir saya cocokkan keduanya dengan =IF(E4=G4;"Sama";"BEDA").

Kolom cek di Excel menunjukkan Sama untuk data balita, lansia, dan tanggal yang tersimpan sebagai teks
Baris paling bawah adalah tanggal yang tersimpan sebagai teks.

Hasilnya 50 dari 50 data Sama. Tidak ada yang BEDA dan tidak ada yang error, termasuk lansia yang lahir tahun 1948.

Jebakan argumen MD: sisa hari bisa minus

Di halaman Microsoft yang sama ada satu kalimat yang membuat saya penasaran. Argumen “MD” disebut bisa menghasilkan angka negatif, nol, atau hasil yang tidak akurat. Microsoft tidak menyarankan memakainya.

Padahal di 50 data saya tadi semuanya kelihatan benar. Jadi rumusnya saya coba uji lagi di Excel dengan tanggal yang lebih nakal: lahir di akhir bulan, lalu tanggal acuannya jatuh di awal bulan setelah Februari. Hasilnya seperti tabel di bawah ini:

LahirTanggal acuanHasil dengan MD
31/01/202601/03/20260 tahun 1 bulan -2 hari
31/12/202501/03/20260 tahun 2 bulan -2 hari
30/01/202601/03/20260 tahun 1 bulan -1 hari
31/05/202501/07/20261 tahun 1 bulan 0 hari
Diuji di Excel versi 16.0 di laptop saya.

Ternyata benar. Umur minus 2 hari jelas tidak mungkin. Baris terakhir juga meleset: dari 31 Mei ke 1 Juli seharusnya ada sisa 1 hari, bukan 0.

Maka bagian hari akhirnya saya ganti untuk memperbaiki masalah ini. Caranya, tanggal lahir saya majukan sejumlah bulan penuh dengan EDATE, lalu tanggal acuan dikurangi hasilnya:

=DATEDIF(D4;$B$1;"Y")&" tahun "&DATEDIF(D4;$B$1;"YM")&" bulan "&($B$1-EDATE(D4;DATEDIF(D4;$B$1;"M")))&" hari"

Dengan rumus ini, keempat tanggal di tabel tadi berubah jadi 1 hari semua, tidak ada lagi yang minus. Hasilnya juga dicocokkan ke 50 data awal, dan sama persis dengan rumus lama. Jadi rumus baru ini tidak merusak yang sudah benar, hanya memperbaiki kasus akhir bulan.

Umur dalam bulan untuk bayi dan balita

Untuk pasien bayi, umur dalam tahun sering kurang berguna karena hasilnya 0. Di sini cukup ganti satuannya jadi M:

=DATEDIF(D4;$B$1;"M")

Anak yang lahir 29 Februari 2024 hasilnya 32 bulan. Bayi yang lahir 31 Januari 2026 hasilnya 9 bulan.

Tanggal lahir yang tersimpan sebagai teks

Jebakan ini yang menurut saya paling berbahaya, karena tidak ada peringatan apa pun. Di data uji, baris terakhir berisi 12/03/2024 yang tersimpan sebagai teks. Di laptop saya hasilnya kebetulan benar, sama dengan tanggal yang berformat Date.

Tanggal berformat Date rata kanan dan tanggal teks rata kiri, ISTEXT menghasilkan TRUE, dan tanggal lahir besok menghasilkan #NUM!
Baris kedua adalah tanggal teks. Baris ketiga adalah tanggal lahir besok.

Coba lihat posisinya. Tanggal berformat Date rata kanan, sedangkan tanggal teks rata kiri. Itu cara paling cepat untuk mengenalinya.

Masalahnya, tanggal teks dibaca menurut pengaturan wilayah komputer yang membukanya. Saya belum mencobanya di komputer berpengaturan Amerika, tapi di sana urutan tanggal biasanya bulan dulu, jadi 12/03/2024 bisa terbaca 3 Desember. Umurnya akan salah. Kesalahan baca karena pengaturan wilayah tidak akan memunculkan peringatan apa pun.

Untuk memastikannya, pakai =ISTEXT(D4). Kalau hasilnya TRUE, tanggal itu masih teks dan sebaiknya diketik ulang di sel yang berformat Date.

Tanggal acuan pakai TODAY(), dan arti #NUM!

Di data uji saya memakai tanggal tetap supaya hasilnya bisa dibandingkan. Untuk dipakai sungguhan di klinik teman saya nanti dan untuk Anda yang ingin mempraktikkannya, isi B1 dengan =TODAY(). Umur pasien akan bertambah sendiri setiap hari tanpa perlu diubah.

Bagaimana kalau tanggal lahirnya salah ketik dan jatuh setelah hari ini? Di lembar uji, tanggal lahir diisi besok, dan hasilnya #NUM!. Microsoft juga menulis hal yang sama: kalau tanggal awal lebih besar dari tanggal akhir, hasilnya #NUM!. Jadi kalau di daftar pasien muncul #NUM!, yang perlu dicek pertama kali adalah tanggal lahirnya, bukan rumusnya.

Format final yang saya sarankan untuk klinik

Ini susunan format final yang saya siapkan untuk teman saya. Tanggal lahir di kolom B mulai baris 2, dan semua rumus memakai TODAY() langsung.

KolomIsiGunanya
ANama pasienTeks biasa
BTanggal lahir, format Date dd/mm/yyyySumber semua rumus
CUmur lengkapDibaca petugas pendaftaran
DUmur tahunFilter dan laporan
EUmur bulanPasien bayi dan balita

Rumus untuk baris 2, lalu disalin ke bawah:

  • C2: =IF(B2="";"";DATEDIF(B2;TODAY();"Y")&" tahun "&DATEDIF(B2;TODAY();"YM")&" bulan "&(TODAY()-EDATE(B2;DATEDIF(B2;TODAY();"M")))&" hari")
  • D2: =IF(B2="";"";DATEDIF(B2;TODAY();"Y"))
  • E2: =IF(B2="";"";DATEDIF(B2;TODAY();"M"))

Bagian IF(B2="";"";...) membuat sel tetap kosong selama tanggal lahir belum diisi, jadi baris kosong di bawah daftar pasien tidak penuh angka aneh.

YEARFRAC tidak saya masukkan. Di uji ini tugasnya hanya sebagai pembanding, dan hasilnya sudah membuktikan DATEDIF untuk umur tahun bisa dipakai.

Tinggalkan komentar