Pada UDF Terbilang sebelumnya, memiliki keterbatasan dimana Terbilang hanya mampu mengeksekusi hingga 2.147.483.647 saja.
Bagaimana agar terbilangnya bisa membaca hingga Triliun?
OK, sebelum kesana kita bahasa dulu kenapa Terbilang sebelumnya hanya sampai 2.147.483.647 saja, hal ini terjadi karena masih menggunakan TypeData long.
Pada VBA6 dan dibawahnya typedata Interget tertinggi ada pada Long, baru pada VBA7 (64bit) sudah ditambahkan Long Pointer (LongPtr) yang lebih panjang jankuannya hingga 8 Byte.
Solusi pertama jika teman-teman sudah menggunakan Office 64Bit, adalah mengubah Long menjadi LongPtr dan tambahkan Case untuk Triliun, sehingga scriptnya menjadi seperti dibawah ini
Function Terbilang(n As Currency) As String 'max 9.22337203685478E+18 (9 kuantiliun) Dim satuan As Variant, Minus As Boolean On Error GoTo terbilang_error satuan = Array("", "Satu", "Dua", "Tiga", "Empat", "Lima", "Enam", "Tujuh", "Delapan", "Sembilan", "Sepuluh", "Sebelas") If n < 0 Then Minus = True n = n * -1 End If Select Case n Case 0 To 11 Terbilang = " " + satuan(Fix(n)) Case 12 To 19 Terbilang = Terbilang(n Mod 10) + " Belas" Case 20 To 99 Terbilang = Terbilang(Fix(n / 10)) + " Puluh" + Terbilang(n Mod 10) Case 100 To 199 Terbilang = " Seratus" + Terbilang(n - 100) Case 200 To 999 Terbilang = Terbilang(Fix(n / 100)) + " Ratus" + Terbilang(n Mod 100) Case 1000 To 1999 Terbilang = " Seribu" + Terbilang(n - 1000) Case 2000 To 999999 Terbilang = Terbilang(Fix(n / 1000)) + " Ribu" + Terbilang(n Mod 1000) Case 1000000 To 999999999 Terbilang = Terbilang(Fix(n / 1000000)) + " Juta" + Terbilang(n Mod 1000000) Case 1000000000 To 999999999999# Terbilang = Terbilang(Fix(n / 1000000000)) + " Milyar" + Terbilang(n Mod 1000000000) Case Else Terbilang = Terbilang(Fix(n / 1000000000000#)) + " Triliun" + Terbilang(n Mod 1000000000000#) End Select If Minus = True Then Terbilang = "Minus" + Terbilang End If Exit Function terbilang_error: MsgBox Err.Description, vbCritical, "Terbilang Error" End Function
Solusi kedua jika pada Excel kamu belum ada TypeData LongPtr, kamu bisa menggunakan Currency dengan catatan harus menambahkan Fungsi Modulus baru karena Fungsi Mod yang ada masih menggunakan typedata long di perhitungannya.
Sehingga Scriptnya menjadi seperti dibawah ini :
Function Terbilang(n As Currency) As String 'max 9.22337203685478E+18 (9 kuantiliun) Dim satuan As Variant, Minus As Boolean 'On Error GoTo terbilang_error satuan = Array("", "Satu", "Dua", "Tiga", "Empat", "Lima", "Enam", "Tujuh", "Delapan", "Sembilan", "Sepuluh", "Sebelas") If n < 0 Then Minus = True n = n * -1 End If Select Case n Case 0 To 11 Terbilang = " " + satuan(Fix(n)) Case 12 To 19 Terbilang = Terbilang(n Mod 10) + " Belas" Case 20 To 99 Terbilang = Terbilang(Fix(n / 10)) + " Puluh" + Terbilang(n Mod 10) Case 100 To 199 Terbilang = " Seratus" + Terbilang(n - 100) Case 200 To 999 Terbilang = Terbilang(Fix(n / 100)) + " Ratus" + Terbilang(n Mod 100) Case 1000 To 1999 Terbilang = " Seribu" + Terbilang(n - 1000) Case 2000 To 999999 Terbilang = Terbilang(Fix(n / 1000)) + " Ribu" + Terbilang(n Mod 1000) Case 1000000 To 999999999 Terbilang = Terbilang(Fix(n / 1000000)) + " Juta" + Terbilang(n Mod 1000000) Case 1000000000 To 999999999999# Terbilang = Terbilang(Fix(n / 1000000000)) + " Milyar" + Terbilang(Modulus(n, 1000000000)) Case Else Terbilang = Terbilang(Fix(n / 1000000000000#)) + " Triliun" + Terbilang(Modulus(n, 1000000000000#)) End Select If Minus = True Then Terbilang = "Minus" + Terbilang End If Exit Function terbilang_error: MsgBox Err.Description, vbCritical, "Terbilang Error" End Function
Dan tambahkan Function Modulus dibawahnya
Function Modulus(Angka1 As Currency, Angka2 As Currency) As Currency Dim MyMod As Currency MyMod = Int(Angka1 / Angka2) Modulus = Angka1 - (MyMod * Angka2) End Function
Simpan script diatas pada Standard Module, Jika sudah maka rumus terbilang sudah bisa digunakana.
Dan berikut ini hasil pengujuan rumus terbilang diatas.