Di berbagai macam tagihan atau kuitansi, kita sering menjumpai baris yang berisi kata "Terbilang". Baris terbilang ini merupakan fungsi yang digunakan untuk menjelaskan angka jumlah tertagih/dibayarkan dalam bentuk kata-kata. Sebagai contoh, selembar tagihan telepon dari operator seluler berjumlah sebesar Rp 446.999 yang diucapkan menjadi Empat Ratus Empat Puluh Enam Ribu Sembilan Ratus Sembilan Puluh Sembilan Rupiah.
![]() |
| Baris Terbilang pada tagihan telepon seluler |
Berikut ini adalah kode VBA di MS Access yang digunakan untuk menuliskan fungsi terbilang.
Function terbilang(curAngka As Currency, strKodeMataUang As String) As String
Dim strPengucapan As String, strAngka As String
Dim str3Digit As String, strSen, strPuluhan As String
Dim strRatusan As Integer, intPuluhan As Integer, intSatuan As Integer
Dim intLoopCount As Integer, intNilaiAwal As Integer
Dim boolAdaSen As Boolean
Dim strBacaAngka(21) As String
strBacaAngka(0) = ""
strBacaAngka(1) = "satu"
strBacaAngka(2) = "dua"
strBacaAngka(3) = "tiga"
strBacaAngka(4) = "empat"
strBacaAngka(5) = "lima"
strBacaAngka(6) = "enam"
strBacaAngka(7) = "tujuh"
strBacaAngka(8) = "delapan"
strBacaAngka(9) = "sembilan"
strBacaAngka(10) = "sepuluh"
strBacaAngka(11) = "sebelas"
strBacaAngka(12) = "dua belas"
strBacaAngka(13) = "tiga belas"
strBacaAngka(14) = "empat belas"
strBacaAngka(15) = "lima belas"
strBacaAngka(16) = "enam belas"
strBacaAngka(17) = "tujuh belas"
strBacaAngka(18) = "delapan belas"
strBacaAngka(19) = "sembilan belas"
strBacaAngka(20) = "dua puluh"
'Jika curAngka=0 tuliskan VOID dan keluar dari fungsi
If Nz(curAngka) = 0 Then
terbilang = "VOID"
Exit Function
End If
'Pengaturan awal
strAngka = Format(curAngka, "000000000000.00") 'Memformat angka menjadi teks sepanjang 15 karakter
Debug.Print Format(curAngka, "###,###.00")
boolAdaSen = False
strSen = Mid(strAngka, 14, 2) 'Cek nilai sen sepanjang 2 karakter di sebelah kanan strAngka
If Val(strSen) <> 0 Then boolAdaSen = True 'Jika nilai sen tidak sama dengan nol, berarti ada sen.
strPengucapan = ""
intLoopCount = 1 'intLoopCount mulai dari 1
intNilaiAwal = 1
'Mulai proses looping dengan Do While
Do While intLoopCount <= 4 'Lakukan perhitungan di bawah ini bila intLoop kurang dari atau sama dengan 4
str3Digit = Mid(strAngka, intNilaiAwal, 3) 'Mengambil strAngka sepanjang tiga digit
strRatusan = Val(Mid(str3Digit, 1, 1)) 'Mengambil bagian dari str3Digit yang menjadi ratusan
intPuluhan = Val(Mid(str3Digit, 2, 2)) 'Mengambil bagian dari str3Digit yang menjadi puluhan
intSatuan = Val(Mid(str3Digit, 3, 1)) 'Mengambil bagian dari str3Digit yang menjadi satuan
If Val(str3Digit) >= 100 Then 'Jika nilai integer dari str3Digit lebih dari atau sama dengan 100, maka
If Val(str3Digit) < 200 Then 'Jika nilai integer dari str3Digit kurang dari 200, maka
strPengucapan = strPengucapan & "seratus " 'Diucapkan 'seratus'
Else 'bila lebih dari atau sama dengan 200. maka
strPengucapan = strPengucapan & strBacaAngka(strRatusan) & " ratus " 'ucapkan sesuai dengan array ditambah ratus
End If
End If
If intPuluhan < 21 Then
strPengucapan = strPengucapan & " " & strBacaAngka(intPuluhan)
Else
strPuluhan = CStr(intPuluhan)
strPengucapan = strPengucapan & strBacaAngka(Val(Left(strPuluhan, 1))) & " puluh " & strBacaAngka(Val(Right(strPuluhan, 1)))
End If
If curAngka >= 1000000000 And intLoopCount = 1 Then
strPengucapan = strPengucapan & " milyar"
End If
If curAngka >= 1000000 And intLoopCount = 2 Then
If str3Digit <> "000" Then strPengucapan = strPengucapan & " juta "
End If
If curAngka >= 1000 And intLoopCount = 3 Then
If curAngka < 2000 Then
strPengucapan = "seribu"
Else
If str3Digit <> "000" Then strPengucapan = strPengucapan & " ribu "
End If
End If
intLoopCount = intLoopCount + 1
intNilaiAwal = intNilaiAwal + 3
If intLoopCount <> 1 Then strPengucapan = strPengucapan & " "
Loop
strPengucapan = strPengucapan & " " & ejaMataUang(strKodeMataUang)
If boolAdaSen Then
If Val(strSen) < 21 Then
strPengucapan = strPengucapan & IIf(curAngka < 1, "", " dan ") & _
strBacaAngka(Val(strSen)) & " sen"
Else
strPuluhan = CStr(intPuluhan)
strPengucapan = strPengucapan & IIf(curAngka < 1, "", " dan ") & _
strBacaAngka(Val(Left(Val(strSen), 1))) & " puluh " & strBacaAngka(Val(Right(Val(strSen), 1))) & _
" sen"
End If
End If
While InStr(strPengucapan, " ") > 0
strPengucapan = Replace(strPengucapan, " ", " ")
Wend
terbilang = Trim(UCase(strPengucapan))
End Function
Bagian awal dari fungsi itu berisi deklarasi varibel beserta pemberian nilai konstanta. Setelah itu, angka yang ingin "dibilang" dikonversi lebih dulu ke teks/string sepanjang 15 karakter digit melalui pernyataan strAngka = Format(curAngka, "000000000000.00"). Nah, dari teks sepanjang 15 karakter angka ini, kita membaginya menjadi 2 bagian, yang dipisahkan oleh tanda titik. Bagian pertama digunakan untuk membaca bilangan bulat, sepanjang 12 digit. Bagian kedua untuk membaca bilangan pecahan yang digunakan sebagai nilai sen, sepanjang dua digit di posisi paling kanan.Bilangan bulat sepanjang 12 digit kemudian dipecah menjadi 4 bagian, masing-masing sepanjang 3 digit yang digunakan untuk membaca angka ratusan, puluhan, dan satuan. Dengan menggunakan loop melalui pernyataan Do While intLoopCount <= 4 ... Loop, kita memproses setiap 3 digit untuk membilang ratusan, puluhan, dan satuan dengan menggunakan statement if ... end if.
Loop pertama dengan panjang 3 digit merupakan angka milyar. Bila angka yang ingin "dibilang" lebih dari atau sama dengan 1 milyar, maka kita menambahkan "milyar". Loop kedua dengan panjang 3 digit merupakan angka jutaan. Bila angka yang ingin "dibilang" lebih dari atau sama dengan 1 juta, maka kita menambahkan "juta". Loop ketiga dengan panjang 3 digit merupakan angka ribuan. Bila angka yang ingin "dibilang" lebih dari atau sama dengan 1000, maka kita menambahkan "ribu".
Setelah proses looping selesai, maka kita akan membaca mata uang yang dipakai di variabel strKodeMataUang, yaitu dengan menggunakan fungsi ejaMataUang(strKodeMataUang) yang ada dalam pernyataan strPengucapan = Trim(strPengucapan) & " " & ejaMataUang(strKodeMataUang). Kode VBA dari fungsi ejaMataUang dapat dibaca di posting yang berjudul Menggunakan Array Sebagai Nilai Sebuah Konstanta (Const) di VBA Access.
Selanjutnya, bila angka yang ingin "dibilang" berisi pecahan, maka pecahan ini diproses untuk bisa diucapkan sebagai sen. Terakhir, Setelah semua proses membilang selesai, ubah semua huruf menjadi huruf besar semua.
Berkut ini adalah bebarapa contoh eksekusi fungsi terbilang di atas yang dilakukana di Immediate Window:
?terbilang(1000,"IDR") 1,000.00 SERIBU RUPIAH ?terbilang(1123,"IDR") 1,123.00 SERIBU SERATUS DUA PULUH TIGA RUPIAH ?terbilang(12345.12,"IDR") 12,345.12 DUA BELAS RIBU TIGA RATUS EMPAT PULUH LIMA RUPIAH DAN DUA BELAS SEN ?terbilang(1234531233.12,"IDR") 1,234,531,233.12 SATU MILYAR DUA RATUS TIGA PULUH EMPAT JUTA LIMA RATUS TIGA PULUH SATU RIBU DUA RATUS TIGA PULUH TIGA RUPIAH DAN DUA BELAS SEN ?terbilang(10110.21,"USD") 10,110.21 SEPULUH RIBU SERATUS SEPULUH DOLAR AMERIKA DAN DUA PULUH SATU SEN ?terbilang(10110123.01,"JPY") 10,110,123.01 SEPULUH JUTA SERATUS SEPULUH RIBU SERATUS DUA PULUH TIGA YEN JEPANG DAN SATU SEN


Comments
Post a Comment