Dalam pembuatan dokumen bisnis seperti Invoice, Kuitansi, maupun Surat Setoran Pajak (SSP), dibutuhkan penerjemahan nominal angka transaksi yang tertera ke dalam kata-kata. Dokumen yang dibuat menggunakan Excel dapat diotomasikan penerjemahannya menggunakan macro sehingga dapat menghemat waktu.
Otomasi formula terbilang dapat dilakukan dengan formula excel (tanpa macro) maupun membuat sendiri fungsi terbilang dengan bantuan VBA. Pada posting kali ini saya akan membahas khusus formula terbilang excel menggunakan VBA Code.
Sudah banyak fungsi terbilang excel (rupiah) yang menggunakan vba code yang tersebar di internet, dengan berbagai algoritma dan teknik pemrogramannya masing-masing. Berikut ini ikut meramaikannya, dengan algoritma dan teknik yang berbeda tentunya (diharapkan dapat menambah pengetahuan teknik pemrograman bagi pembaca yang baru mengenal VBA) , silakan:
Option Explicit
Dim st, abc As String
Function terbilang(x As Range) As String
'infomattic.com
Dim mil As Integer, jeti As Integer, rr As Long, pp As String, dt As Boolean
pp = Format(Fix(x), "000000000000")
dt = (TypeName(x.Value) = "String")
If dt Then
terbilang = "#VALUE!"
Else
mil = Mid(pp, 1, 3): jeti = Mid(pp, 4, 3): rr = Mid(pp, 7, 6)
terbilang = WorksheetFunction.Trim(eja(mil) & IIf(mil, " milyar ", "") & _
eja(jeti) & IIf(jeti, " juta ", "") & eja(rr))
If Len(pp) > 12 Then terbilang = "#N/A"
End If
End Function
Function eja(ByVal num As Single) As String
Dim angka As Single
angka = Mid(Format(Fix(Abs(num)), "000000000000"), 7, 6)
st = Array(" ", "satu ", "dua ", "tiga ", "empat ", "lima ", "enam ", _
"tujuh ", "delapan ", "sembilan ", "sepuluh ", "sebelas ", _
"dua belas ", "tiga belas ", "empat belas ", "lima belas ", _
"enam belas ", "tujuh belas ", "delapan belas ", "sembilan belas ")
abc = vbNullString
eji angka, 10 ^ 6, 10 ^ 5, "ratus ", 1
eji angka, 10 ^ 5, 1000, "ribu ", 2
eji angka, 10 ^ 3, 100, "ratus ", 3
eji angka, 100, 1, " ", 4
eja = abc
End Function
Sub eji(angka As Single, n As Long, t As Long, tp As String, k As Byte)
Dim bb As Byte
bb = Fix((angka Mod n) / t)
If bb < 20 Then If (angka >= 10 ^ 5) * (k = 2) + (k = 4) Then
abc = abc & st(bb) & IIf(((angka Mod 10 ^ 5) < 1000), tp, "")
Else
abc = abc & IIf(bb = 1, "se", st(bb))
End If
Else
abc = abc & st(Fix(bb / 10)) & "puluh " & st(bb Mod 10)
End If
If bb Then abc = abc & tp
End Sub
Bilangan Pecahan?
Dan apabila angka yang ingin diterjemahkan termasuk di dalamnya adalah bilangan pecahan maka sobat perlu menambahkan fungsi terbilang koma berikut ini:
Function koma(z As Range) As String
Dim w As Byte, tx As String, i As Integer, xyz As String, sk, tn As Boolean
sk = Array("nol ", "satu ", "dua ", "tiga ", "empat ", "lima ", "enam ", _
"tujuh ", "delapan ", "sembilan ")
tn = (TypeName(z.Value) = "String")
If Len(Fix(z.Value)) = Len((z.Value)) Then
koma = ""
Else
w = Len(Fix(z.Value)) + 1
tx = Mid(CStr(z.Value), w + 1, Len(CStr(z.Value)) - w)
If tn Then
koma = "#VALUE!"
Else
For i = 1 To WorksheetFunction.Min(3, Len(tx))
xyz = xyz & sk(Mid(tx, i, 1))
Next
koma = IIf(tn, "#VALUE!", " koma ") & WorksheetFunction.Trim(xyz)
End If
End If
End Function
Sebelum menggunakannya, lakukan langkah-langkah berikut ini:
1. Masuk ke Visual Basic Editor (Tekan Alt+F11)
2. Insert module (Insert > Module)
3. Copy Paste VBA code tersebut
4. Keluar dari VBE (Tekan Alt+Q)
Penggunaan:
1. Apabila hanya menginginkan terjemahan bilangan bulatnya saja.
=terbilang(A1)
2. Apabila dikehendaki ingin menambahkan mata uang.
=terbilang(A1)&" rupiah"
3. Apabila dikehendaki juga terjemahan atas bilangan desimalnya, dapat ditambahkan UDF koma.
=terbilang(A1)&koma(A1)&" rupiah"
4. Mengkombinasikan dengan fungsi UPPER atau PROPER, misal:
=UPPER(terbilang(A1)&koma(A1)&" rupiah") atau
=PROPPER(terbilang(A1)&koma(A1)&" rupiah")
Limitasi:
1. Batas penerjemahan untuk angka desimal adalah 3 angka dibelakang koma
2. Angka maksimal adalah 999.999.999.999,999
Atau anda dapat mengunduhnya yang sudah dalam format file Excel Add-In Terbilang di sini
