Result: Dua Belas Ribu Tiga Ratus Empat Puluh Lima Rupiah
Option Explicit
Function Terbilang(InputAngka As Double) As String
Dim I%, strMaxDigit$, arrLevel, arrAngka, TempRp$
arrAngka = Array("", "Se", "Dua", "Tiga", "Empat", "Lima", "Enam", "Tujuh", "Delapan", _"Sembilan", "Sepuluh")
arrLevel = Array("Triliun ", "Miliar ", "Juta ", "Ribu ", "")
strMaxDigit = Right("000000000000000" & Abs(Round(InputAngka, 0)), 15)
For I = 0 To 4
TempRp = ""
If Mid(strMaxDigit, 1 + (3 * I), 1) > 0 Then _TempRp = arrAngka(Mid(strMaxDigit, 1 + (3 * I), 1)) & " Ratus "
If Mid(strMaxDigit, 2 + (3 * I), 2) < 11 Then
TempRp = TempRp & arrAngka(Mid(strMaxDigit, 2 + (3 * I), 2))
ElseIf Mid(strMaxDigit, 2 + (3 * I), 2) < 20 Then
TempRp = TempRp & arrAngka(Mid(strMaxDigit, 3 + (3 * I), 1)) & " Belas"
Else
TempRp = TempRp & arrAngka(Mid(strMaxDigit, 2 + (3 * I), 1)) & " Puluh " & _
arrAngka(Mid(strMaxDigit, 3 + (3 * I), 1))
End If
If Right(TempRp, 1) <> "" Then TempRp = TempRp & " "
If TempRp <> "" Then TempRp = TempRp & arrLevel(I)
Terbilang = Terbilang & TempRp
Next I
If Terbilang <> "" Then
Terbilang = Replace(Replace(Replace(Replace(Terbilang, _
"Se Ribu", "Seribu"), _
"Se Ratus", "Seratus"), _
"Se Belas", "Sebelas"), _
"Se ", "Satu ")
End If
If Abs(Round(InputAngka, 0)) = 0 Then Terbilang = "Nol "
If InputAngka < 0 Then Terbilang = "Minus " & Terbilang
End Function