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