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.
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:
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:
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:
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.
![]() |
| Contoh pengucapan sejumlah angka pada dokumen tagihan ekspor |
- 412 akan diucapkan "US DOLLARS FOUR HUNDRED AND TWELVE" bukan "US DOLLARS FOUR HUNDRED TWELVE"
- 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:
- 412.72 akan diucapkan "US DOLLARS FOUR HUNDRED TWELVE AND SEVENTY-TWO CENTS"
- 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:
- USD 1 akan dibaca ONE DOLLAR atau US DOLLAR ONE
- USD 2 akan dibaca TWO DOLLARS atau US DOLLARS TWO
- USD 12 akan dibaca TWELVE DOLLARS atau US DOLLARS TWELVE
- dst.
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
Post a Comment