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.
Function spellingNumber(curNumber As Currency) As String
  Dim strSpelling As String, strNum As String
  Dim str3Digits As String, strCent, strTens, strAnd As String
  Dim intHundreds As Integer, intTens As Integer, intOnes As Integer
  Dim intLoopCount As Integer, intStartVal As Integer
  Dim boolCent As Boolean
  Dim strReadNumber(90) As String
  strReadNumber(0) = ""
  strReadNumber(1) = "one"
  strReadNumber(2) = "two"
  strReadNumber(3) = "three"
  strReadNumber(4) = "four"
  strReadNumber(5) = "five"
  strReadNumber(6) = "six"
  strReadNumber(7) = "seven"
  strReadNumber(8) = "eight"
  strReadNumber(9) = "nine"
  strReadNumber(10) = "ten"
  strReadNumber(11) = "eleven"
  strReadNumber(12) = "twelve"
  strReadNumber(13) = "thirteen"
  strReadNumber(14) = "fourteen"
  strReadNumber(15) = "fifteen"
  strReadNumber(16) = "sixteen"
  strReadNumber(17) = "seventeen"
  strReadNumber(18) = "eighteen"
  strReadNumber(19) = "nineteen"
  strReadNumber(20) = "twenty"
  strReadNumber(30) = "thirty"
  strReadNumber(40) = "forty"
  strReadNumber(50) = "fifty"
  strReadNumber(60) = "sixty"
  strReadNumber(70) = "seventy"
  strReadNumber(80) = "eighty"
  strReadNumber(90) = "ninety"
  
  If Nz(curNumber) = 0 Then
    spellingNumber = "VOID"
    Exit Function
  End If
  
  strNum = Format(curNumber, "000000000000.00") '123,456,789,012.34
  Debug.Print Format(curNumber, "###,###.00")
  boolCent = False
  strCent = Mid(strNum, 14, 2)
  If Val(strCent) <> 0 Then boolCent = True
  strSpelling = ""
  intLoopCount = 1
  intStartVal = 1
  
'belum bisa untuk angka 40,000.00
  Do While intLoopCount <= 4
    str3Digits = Mid(strNum, intStartVal, 3)
    intHundreds = Val(Mid(str3Digits, 1, 1))
    intTens = Val(Mid(str3Digits, 2, 2))
    intOnes = Val(Mid(str3Digits, 3, 1))
    If Not boolCent And curNumber > 100 Then strAnd = IIf(intLoopCount = 4 And str3Digits <> "000" And intTens <> "00", " and ", " ")
    If Val(str3Digits) >= 100 Then
      strSpelling = strSpelling & strReadNumber(intHundreds) & " hundred "
    End If
    If intTens < 21 Then
      strSpelling = strSpelling & strAnd & strReadNumber(intTens)
    Else
      strTens = CStr(intTens)
      strSpelling = strSpelling & strAnd & strReadNumber(Val(Left(strTens, 1) & "0")) & IIf(Int(intTens / 10) = intTens / 10, "", "-") & strReadNumber(Val(Right(strTens, 1)))
    End If
    
    If curNumber >= 1000000000 And intLoopCount = 1 Then
      strSpelling = strSpelling & " billion "
    End If
    
    If curNumber >= 1000000 And intLoopCount = 2 Then
      If str3Digits <> "000" Then strSpelling = strSpelling & " million "
    End If
    
    If curNumber >= 1000 And intLoopCount = 3 Then
      If str3Digits <> "000" Then strSpelling = strSpelling & " thousand "
    End If
    
    intLoopCount = intLoopCount + 1
    intStartVal = intStartVal + 3
    If intLoopCount <> 1 Then strSpelling = strSpelling & " "
  Loop
  If Right(strSpelling, 2) = "- " Then
    strSpelling = Left(strSpelling, Len(strSpelling) - 2)
  End If
  strSpelling = "us " & IIf(curNumber < 1, "", IIf(curNumber >= 1 And curNumber < 2, " dollar ", " dollars ")) & strSpelling
  If boolCent Then
    If Val(strCent) < 21 Then
      strSpelling = strSpelling & IIf(curNumber < 1, "", " and ") & _
                    strReadNumber(Val(strCent)) & IIf(Val(strCent) = 1, " cent", " cents")
    Else
      strTens = CStr(intTens)
      strSpelling = strSpelling & IIf(curNumber < 1, "", " and ") & _
                    strReadNumber(Val(Left(Val(strCent), 1) & "0")) & "-" & strReadNumber(Val(Right(Val(strCent), 1))) '
      If Right(strSpelling, 1) = "-" Then
        strSpelling = Left(strSpelling, Len(strSpelling) - 1)
      End If
      strSpelling = strSpelling & " cents"
    End If
  End If
 strSpelling = UCase(Left(strSpelling, 1)) & Right(strSpelling, Len(strSpelling) - 1)
  While InStr(strSpelling, "  ") > 0
    strSpelling = Replace(strSpelling, "  ", " ")
  Wend
 spellingNumber = Trim(UCase(strSpelling))
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.

'rnd adalah fungsi acak (random) yang disediakan oleh Access
?spellingNumber(rnd)
.41
US FORTY-ONE CENTS

?spellingNumber(rnd*10)
8.63
US DOLLARS EIGHT AND SIXTY-THREE CENTS

?spellingNumber(rnd*100)
79.05
US DOLLARS SEVENTY-NINE AND FIVE CENTS

?spellingNumber(rnd*1000)
373.54
US DOLLARS THREE HUNDRED SEVENTY-THREE AND FIFTY-FOUR CENTS

?spellingNumber(round(rnd*100,0))
96.00
US DOLLARS NINETY-SIX

?spellingNumber(round(rnd*10,0))
9.00
US DOLLARS NINE

?spellingNumber(round(rnd*10000,0))
562.00
US DOLLARS FIVE HUNDRED AND SIXTY-TWO

?spellingNumber(round(rnd*100000,0))
94,956.00
US DOLLARS NINETY-FOUR THOUSAND NINE HUNDRED AND FIFTY-SIX

?spellingNumber(1000)
1,000.00
US DOLLARS ONE THOUSAND

?spellingNumber(43000)
43,000.00
US DOLLARS FORTY-THREE THOUSAND

?spellingNumber(43020)
43,020.00
US DOLLARS FORTY-THREE THOUSAND AND TWENTY



Comments

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Fungsi Untuk Menghitung Pajak Penghasilan PPh 21 di MS Access

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