UDF Terbilang Triliun

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 1 : Menggunakan LongPtr

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 2: Menggunakan Currency

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.

Leave a Reply

Your email address will not be published. Required fields are marked *

Chat WhatsApp
WhatsApp