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
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