Sunday, May 8, 2011

[vb] Terbilang (also for Visual Basic Editor in EXCEL)

Syntax: Terbilang(12345)
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