Skip to main content

Membuat Fungsi Terbilang Dalam Bahasa Inggris di MS Access VBA

Sebuah perusahaan ekspor biasanya akan membuat dokumen ekspor semacam packing list, bill of lading/shipping instruction, delivery order, dan tentu saja tagihan atau invoice kepada pelanggan di luar negri. Untuk tagihan kepada pelanggan di luar negri, kita tidak mungkin menggunakan hanya satu bahasa saja, yaitu bahasa Indonesia. Biasanya, tagihan ekspor dinyatakan dalam salah satu bahasa internasional yang diakui, misalnya bahasa Inggris. Bisa saja kita membuat tagihan yang memuat dua macam bahasa, yaitu bahasa Indonesia yang kemudian diikuti dengan bahasa Inggris sebagai terjemahannya.

Contoh pengucapan sejumlah angka pada dokumen tagihan ekspor
Bila pada posting yang berjudul.Cara Sederhana Membuat Fungsi Terbilang di MS Acess VBA. kita sudah membuat fungsi terbilang dalam Bahasa Indonesia, kali ini kita akan membuat fungsi terbilang dalam Bahasa Inggris. Pada dasarnya, logika program antara terbilang dalam bahasa Indonesia dan Inggris mempunyai kesamaan. Yang membedakan adalah pada pembacaan angka puluhan terakhir (atau kurang dari seratus) yang harus menggunakan kata sambung "and" bila tidak ada angka pecahan (yang dibaca dalam satuan sen). Contohnya:
  1. 412 akan diucapkan "US DOLLARS FOUR HUNDRED AND TWELVE" bukan "US DOLLARS FOUR HUNDRED TWELVE"
  2. 41,332 akan diucapkan "US DOLLARS FORTY-ONE THOUSAND THREE HUNDRED AND THIRTY-TWO" bukan "US DOLLARS FORTY-ONE THOUSAND THREE HUNDRED THIRTY-TWO"

Bila angka yang dibaca mengandung pecahan yang dibaca dalam satuan sen, maka kata sambung "and" akan digunakan pada angka pecahan itu, bukan di angka puluhan terakhir. Contohnya adalah sebagai berikut:

  1. 412.72 akan diucapkan "US DOLLARS FOUR HUNDRED TWELVE AND SEVENTY-TWO CENTS"
  2. 41,332.02 akan diucapkan "US DOLLARS FORTY-ONE THOUSAND THREE HUNDRED THIRTY-TWO AND TWO CENTS"

Selain penggunaan kata sambung "and", jumlah angka berupa plural atau singular yang akan diucapkan juga mempengaruhi. Angka plural adalah angka mempunyai jumlah lebih dari 1, misalnya 2,3, dan seterusnya. Sedangkan angka singular mempunya jumlah angka sama dengan 1. Bila kita menggunakan satuan mata uang USD (dolar Amerika), misalnya, maka:
  1. USD 1 akan dibaca ONE DOLLAR atau US DOLLAR ONE
  2. USD 2 akan dibaca TWO DOLLARS atau US DOLLARS TWO
  3. USD 12 akan dibaca TWELVE DOLLARS atau US DOLLARS TWELVE
  4. dst.
Berikut ini adalah fungsi yang digunakan untuk mengucapkan angka dalam bahasa Inggris dengan menggunakan mata uang USD, seperti pada gambar di atas.
  1. Function spellingNumber(curNumber As Currency) As String  
  2.   Dim strSpelling As String, strNum As String  
  3.   Dim str3Digits As String, strCent, strTens, strAnd As String  
  4.   Dim intHundreds As Integer, intTens As Integer, intOnes As Integer  
  5.   Dim intLoopCount As Integer, intStartVal As Integer  
  6.   Dim boolCent As Boolean  
  7.   Dim strReadNumber(90) As String  
  8.   strReadNumber(0) = ""  
  9.   strReadNumber(1) = "one"  
  10.   strReadNumber(2) = "two"  
  11.   strReadNumber(3) = "three"  
  12.   strReadNumber(4) = "four"  
  13.   strReadNumber(5) = "five"  
  14.   strReadNumber(6) = "six"  
  15.   strReadNumber(7) = "seven"  
  16.   strReadNumber(8) = "eight"  
  17.   strReadNumber(9) = "nine"  
  18.   strReadNumber(10) = "ten"  
  19.   strReadNumber(11) = "eleven"  
  20.   strReadNumber(12) = "twelve"  
  21.   strReadNumber(13) = "thirteen"  
  22.   strReadNumber(14) = "fourteen"  
  23.   strReadNumber(15) = "fifteen"  
  24.   strReadNumber(16) = "sixteen"  
  25.   strReadNumber(17) = "seventeen"  
  26.   strReadNumber(18) = "eighteen"  
  27.   strReadNumber(19) = "nineteen"  
  28.   strReadNumber(20) = "twenty"  
  29.   strReadNumber(30) = "thirty"  
  30.   strReadNumber(40) = "forty"  
  31.   strReadNumber(50) = "fifty"  
  32.   strReadNumber(60) = "sixty"  
  33.   strReadNumber(70) = "seventy"  
  34.   strReadNumber(80) = "eighty"  
  35.   strReadNumber(90) = "ninety"  
  36.     
  37.   If Nz(curNumber) = 0 Then  
  38.     spellingNumber = "VOID"  
  39.     Exit Function  
  40.   End If  
  41.     
  42.   strNum = Format(curNumber, "000000000000.00"'123,456,789,012.34  
  43.   Debug.Print Format(curNumber, "###,###.00")  
  44.   boolCent = False  
  45.   strCent = Mid(strNum, 14, 2)  
  46.   If Val(strCent) <> 0 Then boolCent = True  
  47.   strSpelling = ""  
  48.   intLoopCount = 1  
  49.   intStartVal = 1  
  50.     
  51. 'belum bisa untuk angka 40,000.00  
  52.   Do While intLoopCount <= 4  
  53.     str3Digits = Mid(strNum, intStartVal, 3)  
  54.     intHundreds = Val(Mid(str3Digits, 1, 1))  
  55.     intTens = Val(Mid(str3Digits, 2, 2))  
  56.     intOnes = Val(Mid(str3Digits, 3, 1))  
  57.     If Not boolCent And curNumber > 100 Then strAnd = IIf(intLoopCount = 4 And str3Digits <> "000" And intTens <> "00"" and "" ")  
  58.     If Val(str3Digits) >= 100 Then  
  59.       strSpelling = strSpelling & strReadNumber(intHundreds) & " hundred "  
  60.     End If  
  61.     If intTens < 21 Then  
  62.       strSpelling = strSpelling & strAnd & strReadNumber(intTens)  
  63.     Else  
  64.       strTens = CStr(intTens)  
  65.       strSpelling = strSpelling & strAnd & strReadNumber(Val(Left(strTens, 1) & "0")) & IIf(Int(intTens / 10) = intTens / 10, """-") & strReadNumber(Val(Right(strTens, 1)))  
  66.     End If  
  67.       
  68.     If curNumber >= 1000000000 And intLoopCount = 1 Then  
  69.       strSpelling = strSpelling & " billion "  
  70.     End If  
  71.       
  72.     If curNumber >= 1000000 And intLoopCount = 2 Then  
  73.       If str3Digits <> "000" Then strSpelling = strSpelling & " million "  
  74.     End If  
  75.       
  76.     If curNumber >= 1000 And intLoopCount = 3 Then  
  77.       If str3Digits <> "000" Then strSpelling = strSpelling & " thousand "  
  78.     End If  
  79.       
  80.     intLoopCount = intLoopCount + 1  
  81.     intStartVal = intStartVal + 3  
  82.     If intLoopCount <> 1 Then strSpelling = strSpelling & " "  
  83.   Loop  
  84.   If Right(strSpelling, 2) = "- " Then  
  85.     strSpelling = Left(strSpelling, Len(strSpelling) - 2)  
  86.   End If  
  87.   strSpelling = "us " & IIf(curNumber < 1, "", IIf(curNumber >= 1 And curNumber < 2, " dollar "" dollars ")) & strSpelling  
  88.   If boolCent Then  
  89.     If Val(strCent) < 21 Then  
  90.       strSpelling = strSpelling & IIf(curNumber < 1, """ and ") & _  
  91.                     strReadNumber(Val(strCent)) & IIf(Val(strCent) = 1, " cent"" cents")  
  92.     Else  
  93.       strTens = CStr(intTens)  
  94.       strSpelling = strSpelling & IIf(curNumber < 1, """ and ") & _  
  95.                     strReadNumber(Val(Left(Val(strCent), 1) & "0")) & "-" & strReadNumber(Val(Right(Val(strCent), 1))) '  
  96.       If Right(strSpelling, 1) = "-" Then  
  97.         strSpelling = Left(strSpelling, Len(strSpelling) - 1)  
  98.       End If  
  99.       strSpelling = strSpelling & " cents"  
  100.     End If  
  101.   End If  
  102.  strSpelling = UCase(Left(strSpelling, 1)) & Right(strSpelling, Len(strSpelling) - 1)  
  103.   While InStr(strSpelling, "  ") > 0  
  104.     strSpelling = Replace(strSpelling, "  "" ")  
  105.   Wend  
  106.  spellingNumber = Trim(UCase(strSpelling))  
  107. End Function  

Kita dapat memanggil fungsi spellingNumber di atas untuk ditempatkan pada sebuah form atau report. Bila fungsi spellingNumber dijalankan di Immediate Window, maka hasilnya akan seperti berikut ini.

  1. 'rnd adalah fungsi acak (random) yang disediakan oleh Access  
  2. ?spellingNumber(rnd)  
  3. .41  
  4. US FORTY-ONE CENTS  
  5.   
  6. ?spellingNumber(rnd*10)  
  7. 8.63  
  8. US DOLLARS EIGHT AND SIXTY-THREE CENTS  
  9.   
  10. ?spellingNumber(rnd*100)  
  11. 79.05  
  12. US DOLLARS SEVENTY-NINE AND FIVE CENTS  
  13.   
  14. ?spellingNumber(rnd*1000)  
  15. 373.54  
  16. US DOLLARS THREE HUNDRED SEVENTY-THREE AND FIFTY-FOUR CENTS  
  17.   
  18. ?spellingNumber(round(rnd*100,0))  
  19. 96.00  
  20. US DOLLARS NINETY-SIX  
  21.   
  22. ?spellingNumber(round(rnd*10,0))  
  23. 9.00  
  24. US DOLLARS NINE  
  25.   
  26. ?spellingNumber(round(rnd*10000,0))  
  27. 562.00  
  28. US DOLLARS FIVE HUNDRED AND SIXTY-TWO  
  29.   
  30. ?spellingNumber(round(rnd*100000,0))  
  31. 94,956.00  
  32. US DOLLARS NINETY-FOUR THOUSAND NINE HUNDRED AND FIFTY-SIX  
  33.   
  34. ?spellingNumber(1000)  
  35. 1,000.00  
  36. US DOLLARS ONE THOUSAND  
  37.   
  38. ?spellingNumber(43000)  
  39. 43,000.00  
  40. US DOLLARS FORTY-THREE THOUSAND  
  41.   
  42. ?spellingNumber(43020)  
  43. 43,020.00  
  44. US DOLLARS FORTY-THREE THOUSAND AND TWENTY  

Comments

Posting Terpopuler

Cara Mengatur dan Menggunakan ODBC untuk Mengakses Data Eksternal

Format Untuk Field Dengan Tipe Data Number dan Currency di MS Access

Memahami Properti Validation Rule dan Validation Text pada Tabel di Access