Dalam materi sebelumya saya sudah buatkan sebuah UDF nilai untuk mengkonversi nilai menjadi sebuah kata. Namun hanya tersedia hanya dalam bahasa indonesia saja.
Bayangkan kamu harus mengubah puluhan hingga ratusan nilai angka menjadi bentuk kata satu per satu secara manual dan harus diubah ke bahasa indonesia dan english.
Tentu hal ini akan sangat merepotkan dan rawan kesalahan. Untungnya, Microsoft Excel menyediakan solusi berupa User Defined Function (UDF), yaitu fungsi buatan pengguna yang bisa ditambahkan ke Excel menggunakan VBA (Visual Basic for Applications).
Melalui UDF kali ini, kita bisa membuat sebuah fungsi kustom yang secara otomatis mengonversi angka seperti 85,35 menjadi “delapan puluh lima koma tiga lima”, sesuai dengan standar pengucapan angka dalam dua bahasa yang berbeda yakni bahasa indonesia dan English.
UDF sangat bermanfaat karena:
Alt + F11
untuk membuka jendela VBA Editor.Insert
> Module
untuk menambahkan modul baru.Berikut script yang digunakan :
Function TerbilangNilai(Angka As Double, Optional Bahasa As String = "ID") As String Dim WordsID As Variant, WordsEN As Variant Dim Words As Variant, TmpStr As String Dim IntegerPart As Long, DecimalPart As String Dim i As Integer ' Kamus angka WordsID = Array("", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan", "sepuluh", "sebelas") WordsEN = Array("", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven") If UCase(Bahasa) = "EN" Then Words = WordsEN Else Words = WordsID End If IntegerPart = Fix(Angka) DecimalPart = Right(CStr(Format(Angka, "#,###.00")), 2) TmpStr = Konversi(IntegerPart, Words, UCase(Bahasa)) If DecimalPart <> "" Then If UCase(Bahasa) = "EN" Then TmpStr = TmpStr & " point" Else TmpStr = TmpStr & " koma" End If For i = 1 To Len(DecimalPart) If Mid(DecimalPart, i, 1) = "0" Then If UCase(Bahasa) = "EN" Then TmpStr = TmpStr & " zero" Else TmpStr = TmpStr & " nol" End If Else TmpStr = TmpStr & " " & Words(CLng(Mid(DecimalPart, i, 1))) End If Next i End If TerbilangNilai = Application.Trim(TmpStr) End Function
Dan juga copy script berikut ini dibawahnya :
Private Function Konversi(ByVal Angka As Long, Words As Variant, Bahasa As String) As String Select Case Angka Case Is < 12 Konversi = Words(Angka) Case Is < 20 If Bahasa = "EN" Then Select Case Angka Case 12: Konversi = "twelve" Case 13: Konversi = "thirteen" Case 15: Konversi = "fifteen" Case Else: Konversi = Words(Angka - 10) & "teen" End Select Else Konversi = Words(Angka - 10) & " belas" End If Case Is < 100 If Bahasa = "EN" Then Dim tens As String Select Case Angka \ 10 Case 2: tens = "twenty" Case 3: tens = "thirty" Case 4: tens = "forty" Case 5: tens = "fifty" Case 8: tens = "eighty" Case Else: tens = Words(Angka \ 10) & "ty" End Select If Angka Mod 10 = 0 Then Konversi = tens Else Konversi = tens & "-" & Words(Angka Mod 10) End If Else Konversi = Words(Angka \ 10) & " puluh " & Konversi(Angka Mod 10, Words, Bahasa) End If Case 100 If Bahasa = "EN" Then Konversi = "one hundred" Else Konversi = "seratus" End If Case Else Konversi = "" ' Optional: jika nilai > 100 End Select End Function
Setelah itu tutup Visual Basic Editor.
Fungsi ini sudah bisa langsung digunakan dengan menggunkan fungsi TERBILANGNILAI , Untuk contoh penggunaan dalam bahasa indonesia bisa dilihat pada rumus berikut :
=PROPER(TerbilangNilai(G3,"ID"))
Berikut hasilnya
Sedangkan untuk format dalam english, tinggal gunakan parameter “EN”, Berikut contoh penulisan rumusnya :
=PROPER(TerbilangNilai(G3,"EN"))
Berikut hasilnya