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