Skip to main content

Cara Sederhana Membuat Fungsi Terbilang di MS Acess VBA


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
Baris terbilang ini mungkin nampak sepele. Kenapa sepele? Karena ada banyak tagihan yang diterbitkan oleh berbagai macam perusahaan tetapi tidak menampilkan baris terbilang seperti ini. Entah dianggap tidak penting atau karena tidak tahu cara membuat program fungsi terbilang menggunakan aplikasi komputer, saya kurang tahu juga. Secara pribadi, saya lebih suka baris terbilang dicantumkan dalam sebuah tagihan, karena dapat menghindarkan kita dari kesalahan baca, apabila jumlah yang dituliskan dengan angka tida terbaca dengan jelas. Apalagi bila tagihan itu berupa kuitansi yang ditulis tangan (secara manual), maka makna terbilang akan menjadi penting.

Berikut ini adalah kode VBA di MS Access yang digunakan untuk menuliskan fungsi terbilang.


  1. Function terbilang(curAngka As Currency, strKodeMataUang As StringAs String  
  2.   Dim strPengucapan As String, strAngka As String  
  3.   Dim str3Digit As String, strSen, strPuluhan As String  
  4.   Dim strRatusan As Integer, intPuluhan As Integer, intSatuan As Integer  
  5.   Dim intLoopCount As Integer, intNilaiAwal As Integer  
  6.   Dim boolAdaSen As Boolean  
  7.   Dim strBacaAngka(21) As String  
  8.   strBacaAngka(0) = ""  
  9.   strBacaAngka(1) = "satu"  
  10.   strBacaAngka(2) = "dua"  
  11.   strBacaAngka(3) = "tiga"  
  12.   strBacaAngka(4) = "empat"  
  13.   strBacaAngka(5) = "lima"  
  14.   strBacaAngka(6) = "enam"  
  15.   strBacaAngka(7) = "tujuh"  
  16.   strBacaAngka(8) = "delapan"  
  17.   strBacaAngka(9) = "sembilan"  
  18.   strBacaAngka(10) = "sepuluh"  
  19.   strBacaAngka(11) = "sebelas"  
  20.   strBacaAngka(12) = "dua belas"  
  21.   strBacaAngka(13) = "tiga belas"  
  22.   strBacaAngka(14) = "empat belas"  
  23.   strBacaAngka(15) = "lima belas"  
  24.   strBacaAngka(16) = "enam belas"  
  25.   strBacaAngka(17) = "tujuh belas"  
  26.   strBacaAngka(18) = "delapan belas"  
  27.   strBacaAngka(19) = "sembilan belas"  
  28.   strBacaAngka(20) = "dua puluh"  
  29. 'Jika curAngka=0 tuliskan VOID dan keluar dari fungsi  
  30.   If Nz(curAngka) = 0 Then  
  31.     terbilang = "VOID"  
  32.     Exit Function  
  33.   End If  
  34. 'Pengaturan awal  
  35.   strAngka = Format(curAngka, "000000000000.00"'Memformat angka menjadi teks sepanjang 15 karakter  
  36.   Debug.Print Format(curAngka, "###,###.00")  
  37.   boolAdaSen = False  
  38.   strSen = Mid(strAngka, 14, 2) 'Cek nilai sen sepanjang 2 karakter di sebelah kanan strAngka  
  39.   If Val(strSen) <> 0 Then boolAdaSen = True 'Jika nilai sen tidak sama dengan nol, berarti ada sen.  
  40.     
  41.   strPengucapan = ""  
  42.   intLoopCount = 1 'intLoopCount mulai dari 1  
  43.   intNilaiAwal = 1  
  44. 'Mulai proses looping dengan Do While  
  45.   Do While intLoopCount <= 4 'Lakukan perhitungan di bawah ini bila intLoop kurang dari atau sama dengan 4  
  46.     str3Digit = Mid(strAngka, intNilaiAwal, 3) 'Mengambil strAngka sepanjang tiga digit  
  47.     strRatusan = Val(Mid(str3Digit, 1, 1)) 'Mengambil bagian dari str3Digit yang menjadi ratusan  
  48.     intPuluhan = Val(Mid(str3Digit, 2, 2)) 'Mengambil bagian dari str3Digit yang menjadi puluhan  
  49.     intSatuan = Val(Mid(str3Digit, 3, 1)) 'Mengambil bagian dari str3Digit yang menjadi satuan  
  50.       
  51.     If Val(str3Digit) >= 100 Then 'Jika nilai integer dari str3Digit lebih dari atau sama dengan 100, maka  
  52.       If Val(str3Digit) < 200 Then 'Jika nilai integer dari str3Digit kurang dari 200, maka  
  53.         strPengucapan = strPengucapan & "seratus " 'Diucapkan 'seratus'  
  54.       Else 'bila lebih dari atau sama dengan 200. maka  
  55.         strPengucapan = strPengucapan & strBacaAngka(strRatusan) & " ratus " 'ucapkan sesuai dengan array ditambah ratus  
  56.       End If  
  57.     End If  
  58.     If intPuluhan < 21 Then  
  59.       strPengucapan = strPengucapan & " " & strBacaAngka(intPuluhan)  
  60.     Else  
  61.       strPuluhan = CStr(intPuluhan)  
  62.       strPengucapan = strPengucapan & strBacaAngka(Val(Left(strPuluhan, 1))) & " puluh " & strBacaAngka(Val(Right(strPuluhan, 1)))  
  63.     End If  
  64.       
  65.     If curAngka >= 1000000000 And intLoopCount = 1 Then  
  66.       strPengucapan = strPengucapan & " milyar"  
  67.     End If  
  68.       
  69.     If curAngka >= 1000000 And intLoopCount = 2 Then  
  70.       If str3Digit <> "000" Then strPengucapan = strPengucapan & " juta "  
  71.     End If  
  72.       
  73.     If curAngka >= 1000 And intLoopCount = 3 Then  
  74.       If curAngka < 2000 Then  
  75.         strPengucapan = "seribu"  
  76.       Else  
  77.         If str3Digit <> "000" Then strPengucapan = strPengucapan & " ribu "  
  78.       End If  
  79.     End If  
  80.       
  81.     intLoopCount = intLoopCount + 1  
  82.     intNilaiAwal = intNilaiAwal + 3  
  83.     If intLoopCount <> 1 Then strPengucapan = strPengucapan & " "  
  84.   Loop  
  85.   strPengucapan = strPengucapan & " " & ejaMataUang(strKodeMataUang)  
  86.   If boolAdaSen Then  
  87.     If Val(strSen) < 21 Then  
  88.       strPengucapan = strPengucapan & IIf(curAngka < 1, """ dan ") & _  
  89.                     strBacaAngka(Val(strSen)) & " sen"  
  90.     Else  
  91.       strPuluhan = CStr(intPuluhan)  
  92.       strPengucapan = strPengucapan & IIf(curAngka < 1, """ dan ") & _  
  93.                     strBacaAngka(Val(Left(Val(strSen), 1))) & " puluh " & strBacaAngka(Val(Right(Val(strSen), 1))) & _  
  94.                     " sen"  
  95.     End If  
  96.   End If  
  97.   While InStr(strPengucapan, "  ") > 0  
  98.     strPengucapan = Replace(strPengucapan, "  "" ")  
  99.   Wend  
  100.  terbilang = Trim(UCase(strPengucapan))  
  101. 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:

  1. ?terbilang(1000,"IDR")  
  2. 1,000.00  
  3. SERIBU RUPIAH  
  4.   
  5. ?terbilang(1123,"IDR")  
  6. 1,123.00  
  7. SERIBU SERATUS DUA PULUH TIGA RUPIAH  
  8.   
  9. ?terbilang(12345.12,"IDR")  
  10. 12,345.12  
  11. DUA BELAS RIBU TIGA RATUS EMPAT PULUH LIMA RUPIAH DAN DUA BELAS SEN  
  12.   
  13. ?terbilang(1234531233.12,"IDR")  
  14. 1,234,531,233.12  
  15. SATU MILYAR DUA RATUS TIGA PULUH EMPAT JUTA LIMA RATUS TIGA PULUH SATU RIBU DUA RATUS TIGA PULUH TIGA RUPIAH DAN DUA BELAS SEN  
  16.   
  17. ?terbilang(10110.21,"USD")  
  18. 10,110.21  
  19. SEPULUH RIBU SERATUS SEPULUH DOLAR AMERIKA DAN DUA PULUH SATU SEN  
  20.   
  21. ?terbilang(10110123.01,"JPY")  
  22. 10,110,123.01  
  23. SEPULUH JUTA SERATUS SEPULUH RIBU SERATUS DUA PULUH TIGA YEN JEPANG DAN SATU SEN  

Comments

Posting Terpopuler

Cara Mengatur dan Menggunakan ODBC untuk Mengakses Data Eksternal

Fungsi Untuk Membuka Database di Access VBA