UDF Terbilang Nilai (Bahasa & English)

Dalam materi sebelumya saya sudah buatkan sebuah UDF nilai untuk mengkonversi nilai menjadi sebuah kata. Namun hanya tersedia hanya dalam bahasa indonesia saja.

Bayangkan kamu harus mengubah puluhan hingga ratusan nilai angka menjadi bentuk kata satu per satu secara manual dan harus diubah ke bahasa indonesia dan english.

Tentu hal ini akan sangat merepotkan dan rawan kesalahan. Untungnya, Microsoft Excel menyediakan solusi berupa User Defined Function (UDF), yaitu fungsi buatan pengguna yang bisa ditambahkan ke Excel menggunakan VBA (Visual Basic for Applications).

Melalui UDF kali ini, kita bisa membuat sebuah fungsi kustom yang secara otomatis mengonversi angka seperti 85,35 menjadi “delapan puluh lima koma tiga lima”, sesuai dengan standar pengucapan angka dalam dua bahasa yang berbeda yakni bahasa indonesia dan English.

Mengapa Menggunakan UDF?

UDF sangat bermanfaat karena:

  • Menghemat waktu: cukup ketik fungsi sekali, dan bisa digunakan berkali-kali.
  • Minim kesalahan: hasil konversi selalu konsisten.
  • Bisa disesuaikan: Anda dapat menyesuaikan format penulisan sesuai kebutuhan instansi atau laporan.

Langkah-Langkah Membuat Fungsi Terbilang Nilai Bahasa dan English

  1. Buka Excel, kemudian tekan Alt + F11 untuk membuka jendela VBA Editor.
  2. Pilih Insert > Module untuk menambahkan modul baru.
  3. Salin dan tempelkan skrip UDF khusus konversi angka ke kata (yang akan dijelaskan dalam bagian kode).
  4. Simpan, lalu tutup jendela editor.

Berikut script yang digunakan :

Function TerbilangNilai(Angka As Double, Optional Bahasa As String = "ID") As String
    Dim WordsID As Variant, WordsEN As Variant
    Dim Words As Variant, TmpStr As String
    Dim IntegerPart As Long, DecimalPart As String
    Dim i As Integer

    ' Kamus angka
    WordsID = Array("", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan", "sepuluh", "sebelas")
    WordsEN = Array("", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven")

    If UCase(Bahasa) = "EN" Then
        Words = WordsEN
    Else
        Words = WordsID
    End If

    IntegerPart = Fix(Angka)
    DecimalPart = Right(CStr(Format(Angka, "#,###.00")), 2)
    TmpStr = Konversi(IntegerPart, Words, UCase(Bahasa))

    If DecimalPart <> "" Then
        If UCase(Bahasa) = "EN" Then
            TmpStr = TmpStr & " point"
        Else
            TmpStr = TmpStr & " koma"
        End If

        For i = 1 To Len(DecimalPart)
            If Mid(DecimalPart, i, 1) = "0" Then
                If UCase(Bahasa) = "EN" Then
                    TmpStr = TmpStr & " zero"
                Else
                    TmpStr = TmpStr & " nol"
                End If
            Else
                TmpStr = TmpStr & " " & Words(CLng(Mid(DecimalPart, i, 1)))
            End If
        Next i
    End If

    TerbilangNilai = Application.Trim(TmpStr)
End Function

Dan juga copy script berikut ini dibawahnya :

Private Function Konversi(ByVal Angka As Long, Words As Variant, Bahasa As String) As String
    Select Case Angka
        Case Is < 12
            Konversi = Words(Angka)
        Case Is < 20
            If Bahasa = "EN" Then
                Select Case Angka
                    Case 12: Konversi = "twelve"
                    Case 13: Konversi = "thirteen"
                    Case 15: Konversi = "fifteen"
                    Case Else: Konversi = Words(Angka - 10) & "teen"
                End Select
            Else
                Konversi = Words(Angka - 10) & " belas"
            End If
        Case Is < 100
            If Bahasa = "EN" Then
                Dim tens As String
                Select Case Angka \ 10
                    Case 2: tens = "twenty"
                    Case 3: tens = "thirty"
                    Case 4: tens = "forty"
                    Case 5: tens = "fifty"
                    Case 8: tens = "eighty"
                    Case Else: tens = Words(Angka \ 10) & "ty"
                End Select
                If Angka Mod 10 = 0 Then
                    Konversi = tens
                Else
                    Konversi = tens & "-" & Words(Angka Mod 10)
                End If
            Else
                Konversi = Words(Angka \ 10) & " puluh " & Konversi(Angka Mod 10, Words, Bahasa)
            End If
        Case 100
            If Bahasa = "EN" Then
                Konversi = "one hundred"
            Else
                Konversi = "seratus"
            End If
        Case Else
            Konversi = "" ' Optional: jika nilai > 100
    End Select
End Function

Setelah itu tutup Visual Basic Editor.

Fungsi ini sudah bisa langsung digunakan dengan menggunkan fungsi TERBILANGNILAI , Untuk contoh penggunaan dalam bahasa indonesia bisa dilihat pada rumus berikut :

=PROPER(TerbilangNilai(G3,"ID"))

Berikut hasilnya

Sedangkan untuk format dalam english, tinggal gunakan parameter “EN”, Berikut contoh penulisan rumusnya :

=PROPER(TerbilangNilai(G3,"EN"))

Berikut hasilnya

Leave a Reply

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

Chat WhatsApp
WhatsApp