Formula untuk Konversi Tanggal menjadi Kalimat pada Excel
disalin dari blognya mas indra, silahkan kunjungi blognya mas indra di: https://indrahulu.blogspot.com/2015/09/formula-untuk-konversi-tanggal-menjadi.html
fomula/rumus untuk menerjemahkan/mengkonversi tanggal menjadi kalimat pada Excel (contoh: "09/01/2015" menjadi "tanggal satu bulan september tahun dua ribu lima belas").
Saya akan coba uraikan cara mudah membuat dan menggunakannya, bahkan bagi pengguna Excel yang tidak memahami programming VBA sama sekali (main copy dan paste saja, hehehe).
Berikut adalah baris-baris kode yang harus kita masukkan melalui Jendela Kerja ke dalam Module1 yang telah terbuka sebelumnya. Copy semua kode ini dan paste pada Jendela Kerja.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | Public Function KalimatAngka( ByVal angka As Integer ) As String Select Case angka Case 1: KalimatAngka = "satu" Case 2: KalimatAngka = "dua" Case 3: KalimatAngka = "tiga" Case 4: KalimatAngka = "empat" Case 5: KalimatAngka = "lima" Case 6: KalimatAngka = "enam" Case 7: KalimatAngka = "tujuh" Case 8: KalimatAngka = "delapan" Case 9: KalimatAngka = "sembilan" End Select End Function Public Function KalimatBulan( ByVal bulan As Integer ) As String Select Case bulan Case 1: KalimatBulan = "Januari" Case 2: KalimatBulan = "Februari" Case 3: KalimatBulan = "Maret" Case 4: KalimatBulan = "April" Case 5: KalimatBulan = "Mei" Case 6: KalimatBulan = "Juni" Case 7: KalimatBulan = "Juli" Case 8: KalimatBulan = "Agustus" Case 9: KalimatBulan = "September" Case 10: KalimatBulan = "Oktober" Case 11: KalimatBulan = "November" Case 12: KalimatBulan = "Desember" End Select End Function Public Function TanggalKeKalimat( ByVal tgl As Date ) As String 'tempat menyimpan hasil konversi... Dim strKalimat As String 'pisahkan bagian tanggal, bulan dan tahun untuk diproses selanjutnya... Dim intTanggal, intBulan, intTahun As Integer intTanggal = Day(tgl) intBulan = Month(tgl) intTahun = Year(tgl) '--- KONVERSI TANGGAL strKalimat = "tanggal " If intTanggal >= 1 And intTanggal <= 9 Then 'angka 1-9 konversi dengan fungsi KalimatAngka()... strKalimat = strKalimat & KalimatAngka(intTanggal) ElseIf intTanggal = 10 Then 'angka 10 diperlakukan secara khusus... strKalimat = strKalimat & "sepuluh" ElseIf intTanggal = 11 Then 'angka 11 juga khusus... strKalimat = strKalimat & "sebelas" ElseIf intTanggal >= 12 And intTanggal <= 19 Then 'angka 12-19, hilangkan puluhan dan ambil satuannya... intTanggal = intTanggal - 10 'angka satuan lalu dikonversi dan ditambah dengan akhiran belas... strKalimat = strKalimat & KalimatAngka(intTanggal) & " belas" Else 'ubah intTanggal menjadi string strTanggal (format 2 digit)... Dim strTanggal As String strTanggal = Format(intTanggal, "00" ) 'pisahkan angka puluhan dan angka satuan dari strTanggal... Dim intPuluhan, intSatuan As Integer intTglPuluhan = CInt (Left(strTanggal, 1)) intTglSatuan = CInt (Right(strTanggal, 1)) 'konversi angka puluhan terlebih dahulu... strKalimat = strKalimat & KalimatAngka(intTglPuluhan) & " puluh" 'konversi angka satuan... If intTglSatuan > 0 Then 'bila bukan nol, angka satuan dikonversi dengan fungsi KalimatAngka()... strKalimat = strKalimat & " " & KalimatAngka(intTglSatuan) End If End If 'selesai menerjemahkan tanggal. 'masukkan spasi dan kata antara tanggal dan bulan... strKalimat = strKalimat & " bulan " '--- KONVERSI BULAN 'bulan dikonversi secara mudah dengan fungsi KalimatBulan()... strKalimat = strKalimat & KalimatBulan(intBulan) 'masukkan spasi dan kata antara bulan dan tahun... strKalimat = strKalimat & " tahun " '--- KONVERSI TAHUN 'ubah intTahun menjadi string strTahun (format menjadi 4 digit)... Dim strTahun As String strTahun = Format(intTahun, "0000" ) 'pisahkan masing-masing digit (ribuan, ratusan, puluhan, satuan) dari strTahun... Dim intThnRibuan, intThnRatusan, intThnPuluhan, intThnSatuan As Integer intThnRibuan = Left(strTahun, 1) intThnRatusan = Mid(strTahun, 2, 1) intThnPuluhan = Mid(strTahun, 3, 1) intThnSatuan = Right(strTahun, 1) 'konversi angka ribuannya... If intThnRibuan = 1 Then strKalimat = strKalimat & "seribu" ElseIf intThnRibuan > 1 Then strKalimat = strKalimat & KalimatAngka(intThnRibuan) & " ribu" End If 'konversi angka ratusannya... If intThnRatusan = 1 Then strKalimat = strKalimat & " seratus" ElseIf intThnRatusan > 1 Then strKalimat = strKalimat & " " & KalimatAngka(intThnRatusan) & " ratus" End If 'konversi angka puluhan dan sekaligus satuannya... If intThnPuluhan = 0 Then 'bila angka puluhannya adalah 0, langsung konversi angka satuan... If intThnSatuan > 0 Then 'namun hanya lakukan konversi bila angka satuannya bukan 0 strKalimat = strKalimat & " " & KalimatAngka(intThnSatuan) End If ElseIf intThnPuluhan = 1 Then 'bila angka puluhannya adalah 1, berarti belasan... If intThnSatuan = 0 Then strKalimat = strKalimat & " sepuluh" ElseIf intThnSatuan = 1 Then strKalimat = strKalimat & " sebelas" Else strKalimat = strKalimat & " " & KalimatAngka(intThnSatuan) & " belas" End If ElseIf intThnPuluhan >= 2 Then 'bila angka puluhannya lebih dari 1, konversi dulu angka puluhannya... strKalimat = strKalimat & " " & KalimatAngka(intThnPuluhan) & " puluh" 'lalu konversi angka satuannya... If intThnSatuan > 0 Then 'hanya angka satuan yang bukan 0 yang dikonversi... strKalimat = strKalimat & " " & KalimatAngka(intThnSatuan) End If End If 'selesai konversi tahun. 'proses konversi selesai, kembalikan hasilnya kepada fungsi... TanggalKeKalimat = strKalimat End Function |
Maka sekarang tampilan layar VBA kira-kira akan seperti berikut ini:
Penjelasan Kode
Bila Anda mau cepat saja, silahkan lewati bagian ini. Disini saya coba jelaskan proses dan logika kode secara baris per baris bagi yang tertarik. Kode ini sengaja saya tulis dengan logika sederhana agar gampang diikuti, siapa tahu juga bisa merangsang teman-teman lain untuk menemukan cara lain menyelesaikan tugas ini.
Baris 1-13 mendefenisikan fungsi KalimatAngka() yang tugasnya mengkonversi angka dasar (1-9) ke dalam kata. Begitu juga baris 15-30, medefenisikan fungsi KalimatBulan() yang mengkonversi angka bulan menjadi kata nama bulan yang sesuai. Kedua fungsi ini nantinya akan digunakan oleh fungsi utama dibawahnya, yakni fungsi TanggalKeKalimat() pada baris 32-133.
Fungsi utama TanggalKeKalimat() bekerja dengan mengkonversi bagian per bagian dari tanggal. Baris 34 mempersiapkan tempat menyimpan hasil konversi sementara. Baris 37-40 memecah data tanggal yang di-input menjadi bagian-bagian tanggal, bulan dan tahun. Dan, baris 43 menambahkan kata awal 'tanggal' pada hasil konversi.
32 33 34 35 36 37 38 39 40 | Public Function TanggalKeKalimat( ByVal tgl As Date ) As String 'tempat menyimpan hasil konversi... Dim strKalimat As String 'pisahkan bagian tanggal, bulan dan tahun untuk diproses selanjutnya... Dim intTanggal, intBulan, intTahun As Integer intTanggal = Day(tgl) intBulan = Month(tgl) intTahun = Year(tgl) |
Baris 44-70 adalah proses konversi yang sebenarnya dan dibagi 5 bagian besar. [Bagian 1] Untuk angka 1-9 secara gampang dapat dikonversi langsung oleh fungsi KalimatAngka() (baris 46).
42 43 44 45 46 | '--- KONVERSI TANGGAL strKalimat = "tanggal " If intTanggal = 1 And intTanggal <= 9 Then 'angka 1-9 konversi dengan fungsi KalimatAngka()... strKalimat = strKalimat & KalimatAngka(intTanggal) |
[Bagian 2] Angka 10 kita perlakukan khusus karena tidak menginginkan hasil 'satu nol' tapi 'sepuluh' (baris 49).
47 48 49 | ElseIf intTanggal = 10 Then 'angka 10 diperlakukan secara khusus... strKalimat = strKalimat & "sepuluh" |
[Bagian 3] Begitu juga angka 11 kita perlakukan khusus karena hasil yang benar adalah 'sebelas', bukan 'satu satu' (baris 52).
50 51 52 | ElseIf intTanggal = 11 Then 'angka 11 juga khusus... strKalimat = strKalimat & "sebelas" |
[Bagian 4] Untuk angka 12-19, pertama puluhan dibuang dan hanya diambil satuannya (baris 55). Angka satuannya ini yang kemudian dikonversi dan disambung dengan 'belas' (baris 57).
53 54 55 56 57 | ElseIf intTanggal >= 12 And intTanggal <= 19 Then 'angka 12-19, hilangkan puluhan dan ambil satuannya... intTanggal = intTanggal - 10 'angka satuan lalu dikonversi dan ditambah dengan akhiran belas... strKalimat = strKalimat & KalimatAngka(intTanggal) & " belas" |
Selanjutnya angka yang kemungkinan masuk pada [Bagian 5] adalah tinggal angka 20-32 (tidak ada tanggal 33). Prosesnya disini pertama dengan mengubah dan memformat integer tanggal menjadi string (baris 60-61).
58 59 60 61 | Else 'ubah intTanggal menjadi string strTanggal (format 2 digit)... Dim strTanggal As String strTanggal = Format(intTanggal, "00" ) |
Lalu tanggal ini diambil angka puluhan dan satuannya (baris 63-65).
62 63 64 65 | 'pisahkan angka puluhan dan angka satuan dari strTanggal... Dim intPuluhan, intSatuan As Integer intTglPuluhan = CInt (Left(strTanggal, 1)) intTglSatuan = CInt (Right(strTanggal, 1)) |
Angka puluhan lalu dikonversi dengan fungsi KalimatAngka() disambung dengan kata 'puluh' (baris 67).
66 67 | 'konversi angka puluhan terlebih dahulu... strKalimat = strKalimat & KalimatAngka(intTglPuluhan) & " puluh" |
Angka satuan dikonversi dengan fungsi yang sama juga hanya apabila angka satuannya bukan 0 (baris 69-72).
68 69 70 71 72 73 | 'konversi angka satuan... If intTglSatuan > 0 Then 'bila bukan nol, angka satuan dikonversi dengan fungsi KalimatAngka()... strKalimat = strKalimat & " " & KalimatAngka(intTglSatuan) End If End If 'selesai menerjemahkan tanggal. |
Angka bulan dikonversi langsung dengan fungsi KalimatBulan() (baris 80).
75 76 77 78 79 80 81 82 83 | 'masukkan spasi dan kata antara tanggal dan bulan... strKalimat = strKalimat & " bulan " '--- KONVERSI BULAN 'bulan dikonversi secara mudah dengan fungsi KalimatBulan()... strKalimat = strKalimat & KalimatBulan(intBulan) 'masukkan spasi dan kata antara bulan dan tahun... strKalimat = strKalimat & " tahun " |
Angka tahun diformat menjadi string 4 digit terlebih dahulu (baris 87-88).
85 86 87 88 | '--- KONVERSI TAHUN 'ubah intTahun menjadi string strTahun (format menjadi 4 digit)... Dim strTahun As String strTahun = Format(intTahun, "0000" ) |
Lalu masing-masing digit dipisahkan secara ribuan, ratusan, puluhan dan satuan (baris 90-94).
89 90 91 92 93 94 | 'pisahkan masing-masing digit (ribuan, ratusan, puluhan, satuan) dari strTahun... Dim intThnRibuan, intThnRatusan, intThnPuluhan, intThnSatuan As Integer intThnRibuan = Left(strTahun, 1) intThnRatusan = Mid(strTahun, 2, 1) intThnPuluhan = Mid(strTahun, 3, 1) intThnSatuan = Right(strTahun, 1) |
Angka ribuan, ratusan, puluhan dan satuan ini dikonversi secara satu-persatu, mulai dari ribuan (baris 96-100). Bila angka ribuannya adalah 1 maka hasil menjadi 'seribu', bila yang lain maka konversi dengan fungsi KalimatAngka() dan sambung dengan 'ribu'.
95 96 97 98 99 100 | 'konversi angka ribuannya... If intThnRibuan = 1 Then strKalimat = strKalimat & "seribu" ElseIf intThnRibuan > 1 Then strKalimat = strKalimat & KalimatAngka(intThnRibuan) & " ribu" End If |
Angka ratusan juga dikonversi dengan pola yang sama dengan angka ribuan (baris 102-106).
101 102 103 104 105 106 | 'konversi angka ratusannya... If intThnRatusan = 1 Then strKalimat = strKalimat & " seratus" ElseIf intThnRatusan > 1 Then strKalimat = strKalimat & " " & KalimatAngka(intThnRatusan) & " ratus" End If |
Mengkonversi angka puluhan dan satuan, proses dibagi. Bila angka puluhannya 0, maka konversi angka satuannya (juga, hanya bila 0) (baris 108-113).
107 108 109 110 111 112 113 | 'konversi angka puluhan dan sekaligus satuannya... If intThnPuluhan = 0 Then 'bila angka puluhannya adalah 0, langsung konversi angka satuan... If intThnSatuan > 0 Then 'namun hanya lakukan konversi bila angka satuannya bukan 0 strKalimat = strKalimat & " " & KalimatAngka(intThnSatuan) End If |
Bila angka puluhannya adalah 1 maka dikonversi dengan metode konversi angka belasan pada tanggal seperti sebelumnya (baris 116-122).
114 115 116 117 118 119 120 121 122 | ElseIf intThnPuluhan = 1 Then 'bila angka puluhannya adalah 1, berarti belasan... If intThnSatuan = 0 Then strKalimat = strKalimat & " sepuluh" ElseIf intThnSatuan = 1 Then strKalimat = strKalimat & " sebelas" Else strKalimat = strKalimat & " " & KalimatAngka(intThnSatuan) & " belas" End If |
Namun bila angka puluhannya sama dengan atau lebih besar dari 2, maka dikonversi dengan mudah oleh fungsi KalimatAngkat() (baris 125-130).
123 124 125 126 127 128 129 130 131 | ElseIf intThnPuluhan >= 2 Then 'bila angka puluhannya lebih dari 1, konversi dulu angka puluhannya... strKalimat = strKalimat & " " & KalimatAngka(intThnPuluhan) & " puluh" 'lalu konversi angka satuannya... If intThnSatuan > 0 Then 'hanya angka satuan yang bukan 0 yang dikonversi... strKalimat = strKalimat & " " & KalimatAngka(intThnSatuan) End If End If 'selesai konversi tahun. |
Baris 135 mengakhiri dengan mengembalikan hasil konversi kepada fungsi TanggalKeKalimat().
133 134 135 | 'proses konversi selesai, kembalikan hasilnya kepada fungsi... TanggalKeKalimat = strKalimat End Function |
Menggunakannya pada Worksheet
Sekarang Anda dapat menutup layar VBA dan pindah ke layar Excel untuk mulai menggunakan kode di atas. Ketik tanggal pada salah satu cell (contoh: cell A1) atau lihat satu cell yang berisi tanggal di dalamnya dan tandai range-nya. Pada cell lain, ketik formula sebagai berikut:
=TanggalKeKalimat( "A1" ) |
Menggunakan formula tersebut, Excel akan menjalankan kode yang disusun tadi dan menampilkan hasilnya. Berikut tampilan worksheet saya untuk mencobanya.
... ... ...
Sampai disini Anda telah menggunakan VBA untuk melakukan konversi tanggal ke kalimat sesuai dengan yang diinginkan. Bila perlu, Anda dapat mengubah beberapa baris kode di atas sesuai kebutuhan (contoh: penyesuaian huruf besar/kecil, dll). Trims sudah mengikuti tulisan ini!
Komentar
Posting Komentar