Sebelum lanjut, bagi teman-teman yang baru saja tiba disini, mungkin perlu sedikit pemanasan dengan membaca tulisan sebelumnya terkait konversi tanggal ke kalimat, yakni Formula untuk Konversi Tanggal ke Kalimat pada Excel dan Konversi Tanggal ke Kalimat pada Excel (lanjutan).
Tulisan kali ini, saya masih belum sempat menjelaskan baris per baris kode programnya. Mungkin lain kali. Saya telah bubuhkan beberapa komentar seperlunya untuk membantu memperjelas alur program, namun bila ada yang membutuhkan penjelasan detailnya, lain waktu saya akan coba menambahkan bagian penjelasannya. Untuk sekarang, cukup copy-paste saja kode program berikut dan seharusnya ia bisa berjalan dengan baik.
Saya orang baru; Apa itu VBA pada Excel..??
Hmm, cobalah bicara dengan google. Dia tahu banyak. Untuk kali ini saya langsung mengajak teman-teman membuka Excel dan kemudian membuka layar VBA dengan menekan kombinasi tombol
Alt + F11Berikut screenshot-nya:
Memasukkan kode program
Di tampilan tadi pada bagian Jendela Project, pilih (dengan mengklik) VBAProject dan kemudian ambil menu:
Insert > ModuleSetelah itu VBA akan menambahkan Module1 pada Jendela Project. Klik-ganda di Module1 untuk membuka dan menampilkan isinya pada Jendela Kerja. Untuk sekarang, isi Module1 di Jendela Kerja masih kosong. Langsung saja, copy kode program berikut dan paste di Jendela Kerja.
Public Function SatuAngkaKeHuruf(ByVal angka As Integer) As String Dim strKata As String Select Case angka Case 0: strKata = "nol" Case 1: strKata = "satu" Case 2: strKata = "dua" Case 3: strKata = "tiga" Case 4: strKata = "empat" Case 5: strKata = "lima" Case 6: strKata = "enam" Case 7: strKata = "tujuh" Case 8: strKata = "delapan" Case 9: strKata = "sembilan" End Select SatuAngkaKeHuruf = strKata End Function Public Function TigaAngkaKeHuruf(ByVal angka As Integer) As String 'tempat menyimpan hasil konversi... Dim strKalimat As String strKalimat = "" 'ubah angka ke text dengan tiga karakter... Dim strAngka As String strAngka = Format(angka, "000") 'ambil bagian ratusan dan bagian puluhan-satuan... Dim intRatusan, intPuluhanSatuan As Integer intRatusan = CInt(Left(strAngka, 1)) intPuluhanSatuan = CInt(Right(strAngka, 2)) 'konversi bagian ratusan ke kalimat... If intRatusan >= 1 Then If intRatusan = 1 Then strKalimat = strKalimat & IIf(strKalimat <> "", " ", "") & "seratus" Else strKalimat = strKalimat & IIf(strKalimat <> "", " ", "") & SatuAngkaKeHuruf(intRatusan) & " ratus" End If End If 'konversi bagian puluhan-satuan ke kalimat... Dim intPuluhan, intSatuan As Integer If intPuluhanSatuan >= 1 And intPuluhanSatuan <= 9 Then strKalimat = strKalimat & IIf(strKalimat <> "", " ", "") & SatuAngkaKeHuruf(intPuluhanSatuan) ElseIf intPuluhanSatuan = 10 Then strKalimat = strKalimat & IIf(strKalimat <> "", " ", "") & "sepuluh" ElseIf intPuluhanSatuan = 11 Then strKalimat = strKalimat & IIf(strKalimat <> "", " ", "") & "sebelas" ElseIf intPuluhanSatuan >= 12 And intPuluhanSatuan <= 19 Then intSatuan = intPuluhanSatuan - 10 strKalimat = strKalimat & IIf(strKalimat <> "", " ", "") & SatuAngkaKeHuruf(intSatuan) & " belas" ElseIf intPuluhanSatuan >= 20 Then Dim strPuluhanSatuan As String strPuluhanSatuan = Format(intPuluhanSatuan, "00") intPuluhan = CInt(Left(strPuluhanSatuan, 1)) intSatuan = CInt(Right(strPuluhanSatuan, 1)) strKalimat = strKalimat & IIf(strKalimat <> "", " ", "") & SatuAngkaKeHuruf(intPuluhan) & " puluh" If intSatuan > 0 Then strKalimat = strKalimat & IIf(strKalimat <> "", " ", "") & SatuAngkaKeHuruf(intSatuan) End If End If 'hasil akhir... TigaAngkaKeHuruf = strKalimat End Function Public Function NamaRibuan(ByVal urutan As Integer) As String Dim strNama As String Select Case urutan Case 1: strNama = "" Case 2: strNama = "ribu" Case 3: strNama = "juta" Case 4: strNama = "milyar" Case 5: strNama = "trilyun" Case 6: strNama = "ribu trilyun" End Select NamaRibuan = strNama End Function Public Function AngkaKeKalimat(ByVal angka As Double, Optional ByVal presisi As Integer = 0) As String 'periksa nilai negatif dan simpan untuk nanti... Dim isNegatif As Boolean If angka < 0 Then isNegatif = True Else isNegatif = False End If 'hilangkan status negatif... angka = Abs(angka) 'pisahkan dan ambil bagian nondesimal-nya dan desimal-nya... Dim intNonDecimal, intDecimal As Integer intNonDecimal = Int(angka) If presisi = 0 Then intDecimal = 0 Else intDecimal = Int((angka - CDec(intNonDecimal)) * WorksheetFunction.Power(10, presisi)) End If 'tempat menyimpan hasil konversi... Dim strKalimat As String strKalimat = "" 'proses konversi bagian nondesimal... 'ubah bagian nondesimal ke text... Dim strNonDecimal As String strNonDecimal = CStr(intNonDecimal) 'hitung jumlah sub-bagian per tiga digit... Dim intCount As Integer intCount = WorksheetFunction.RoundUp(Len(strNonDecimal) / 3, 0) 'proses loop konversi setiap loop sub-bagian... Dim strWorking, strRibuan, strResult As String For i = 1 To intCount strNonDecimal = Left(strNonDecimal, Len(strNonDecimal) - 3 * IIf(i = 1, 0, 1)) strWorking = strNonDecimal If Len(strWorking) > 3 Then strWorking = Right(strWorking, 3) End If strRibuan = NamaRibuan(i) strResult = TigaAngkaKeHuruf(CInt(strWorking)) If strResult <> "" Then strKalimat = TigaAngkaKeHuruf(CInt(strWorking)) & IIf(strRibuan <> "", " " & strRibuan, "") & IIf(strKalimat <> "", " ", "") & strKalimat End If Next i 'proses konversi bagian desimal... 'lakukan konversi hanya bila parameter kedua (presisi) telah ditentukan... If presisi > 0 Then Dim strDecimal, strFormatPresisi, strPresisi As String strFormatPresisi = String(presisi, "0") strDecimal = Format(intDecimal, strFormatPresisi) If strKalimat = "" Then strKalimat = "nol" strKalimat = strKalimat & IIf(strKalimat <> "", " ", "") & "koma" For i = 1 To presisi strPresisi = Right(strDecimal, Len(strDecimal) - (i - 1)) strKalimat = strKalimat & " " & SatuAngkaKeHuruf(CInt(Left(strPresisi, 1))) Next i End If 'hasil akhir konversi... AngkaKeKalimat = IIf(isNegatif, "negatif ", "") & Replace(strKalimat, "satu ribu", "seribu") 'ubah huruf pertama menjadi huruf besar... AngkaKeKalimat = UCase(Left(AngkaKeKalimat, 1)) & LCase(Right(AngkaKeKalimat, Len(AngkaKeKalimat) - 1)) End Function
Menggunakan Formula di Worksheet Excel
Okey, sekarang cukup dengan VBA, kita pindah ke tampilan worksheet Excel untuk mencoba gunakan formula tadi. Format penggunaannya:
=AngkaKeKalimat(angka, [presisi])Formula menerima 2 parameter. Untuk parameter pertama, yakni
angka
, adalah angka yang akan dikonversi menjadi kalimat. Dan parameter kedua, yakni presisi
, adalah jumlah angka dibelakang koma yang ikut dikonversi. Bila parameter kedua ini tidak diberikan, maka dianggap presisi = 0
(artinya, angka dibelakang koma tidak ikut dikonversi).Selamat mencoba!
Saohagolo...
BalasHapusSaohagolo...
BalasHapus