- Pendahuluan
- Disclaimer
- Persiapan Data Transaksi
- Desain Template Kuitansi
- Menambahkan Rumus Terbilang (Rupiah)
- Kode VBA untuk Mencetak Semua Data
- Cara Menjalankan Makro
- Tips Tambahan
- Penutup
📍 Pendahuluan
Excel sangat fleksibel dalam membuat dokumen cetak seperti kuitansi pembayaran. Namun, jika Anda memiliki banyak transaksi, mencetak satu per satu bisa memakan waktu. Dengan VBA (Visual Basic for Applications), Anda bisa mencetak semua kuitansi secara otomatis dengan sekali klik.
⚠️ Disclaimer
Artikel ini berfokus pada penggunaan VBA untuk mencetak semua data sekaligus. Desain template kuitansi dan struktur data ditampilkan secara sederhana agar lebih mudah diikuti. Anda bebas memodifikasi tampilan dan struktur datanya sesuai kebutuhan instansi atau pribadi.
🗃️ Persiapan Data Transaksi
Buat sheet bernama "Data" berisi transaksi dengan kolom seperti berikut:
No | Nama | Tanggal | Jumlah | Keterangan |
---|---|---|---|---|
1 | Ahmad Yusuf | 01/04/2025 | 100000 | Pembayaran SPP |
2 | Siti Aminah | 03/04/2025 | 150000 | Uang Gedung |
📐 Desain Template Kuitansi
Buat sheet baru bernama "Kuitansi" dan desain seperti ini:
A | B |
---|---|
KUITANSI | |
Sudah diterima dari | =Data!B2 |
Tanggal | =Data!C2 |
Jumlah Uang | =Data!D2 |
Terbilang | =Terbilang(Data!D2) |
Untuk Pembayaran | =Data!E2 |
TTD |
🔤 Menambahkan Rumus Terbilang (Rupiah)
Ada dua opsi: menggunakan fungsi Excel Macro atau VBA.
✅ 1. Fungsi Terbilang VBA
Penggunaan fungsi terbilang berbasis VBA menawarkan tingkat fleksibilitas yang tinggi dan memungkinkan penyesuaian yang lebih mendalam sesuai dengan kebutuhan spesifik. Kode VBA yang diberikan dalam artikel ini bekerja dengan cara memecah angka nominal menjadi satuan, puluhan, ratusan, ribuan, jutaan, hingga triliunan. Setiap bagian angka kemudian dikonversi menjadi representasi kata-katanya. Berikut langkah-langkahnya:
Tekan Alt + F11, pilih Insert > Module, dan salin kode berikut:
Function Terbilang(ByVal Angka As Currency) As String
Dim Huruf() As String
Dim Satuan() As String
Dim Temp As String
Dim i As Integer, j As Integer, Triad As String, Kata As String
Dim Bilangan As String
Huruf = Split("Nol Satu Dua Tiga Empat Lima Enam Tujuh Delapan Sembilan", " ")
Satuan = Split("", "Ribu Juta Miliar Triliun")
If Angka = 0 Then
Terbilang = "Nol Rupiah"
Exit Function
End If
Bilangan = Format(Angka, "0")
i = 0
Do While Len(Bilangan) > 0
Kata = ""
Triad = Right("000" & Right(Bilangan, 3), 3)
j = 1
Do While j <= 3
Select Case Mid(Triad, j, 1)
Case "1"
If j = 1 And Mid(Triad, 2, 1) = "0" And Mid(Triad, 3, 1) = "0" Then
Kata = Kata & "Seratus "
ElseIf j = 2 And Mid(Triad, 3, 1) = "0" Then
Kata = Kata & "Sepuluh "
ElseIf j = 2 And Mid(Triad, 3, 1) = "1" Then
Kata = Kata & "Sebelas "
Else
Kata = Kata & IIf(j = 1, "Satu", Huruf(CInt(Mid(Triad, j, 1)))) & " "
If j = 2 Then Kata = Kata & "Puluh "
If j = 1 Then Kata = Kata & "Ratus "
End If
Case "0"
"" ' skip
Case Else
Kata = Kata & Huruf(CInt(Mid(Triad, j, 1))) & " "
If j = 2 Then Kata = Kata & "Puluh "
If j = 1 Then Kata = Kata & "Ratus "
End Select
j = j + 1
Loop
If Kata <> "" Then Kata = Kata & IIf(i > 0, Satuan(i) & " ", "")
Temp = Kata & Temp
Bilangan = Left(Bilangan, Len(Bilangan) - 3)
i = i + 1
Loop
Temp = Replace(Temp, "Satu Ribu", "Seribu")
Terbilang = Application.WorksheetFunction.Proper(Trim(Temp)) & "Rupiah"
End Function
Sekarang, gunakan rumus di cell seperti ini:
=Terbilang(D2)
Keuntungan Menggunakan Fungsi VBA:
- Fleksibilitas: Kode dapat dimodifikasi jika ada kebutuhan format terbilang yang berbeda.
- Kemandirian: Setelah fungsi ditambahkan ke dalam workbook, Anda dapat menggunakannya di mana saja tanpa perlu menginstal add-in tambahan.
- Performa: Untuk penggunaan berulang dalam jumlah besar, fungsi VBA cenderung lebih efisien dibandingkan rumus Excel yang sangat panjang dan kompleks.
✅ 2. Fungsi Terbilang Tanpa VBA
Alternatif jika Anda tidak ingin menggunakan kode VBA adalah dengan memanfaatkan serangkaian fungsi Excel yang dikombinasikan untuk menghasilkan format terbilang. Rumus yang diberikan dalam artikel ini adalah contoh implementasi yang cukup kompleks namun efektif.
Jika tidak ingin menggunakan kode VBA, Anda bisa menggunakan rumus berikut:
=IF(D2=0,"nol",IF(D2<0,"minus ",) SUBSTITUTE(TRIM(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(IF(--MID(TEXT(ABS(D2),"000000000000000"),1,3)=0,"",MID(TEXT(ABS(D2),"000000000000000"),1,1)" ratus "&MID(TEXT(ABS(D2),"000000000000000"),2,1)" puluh "&MID(TEXT(ABS(D2),"000000000000000"),3,1)" trilyun ")&IF(--MID(TEXT(ABS(D2),"000000000000000"),4,3)=0,"",MID(TEXT(ABS(D2),"000000000000000"),4,1)" ratus "&MID(TEXT(ABS(D2),"000000000000000"),5,1)" puluh "&MID(TEXT(ABS(D2),"000000000000000"),6,1)" milyar ")&IF(--MID(TEXT(ABS(D2),"000000000000000"),7,3)=0,"",MID(TEXT(ABS(D2),"000000000000000"),7,1)" ratus "&MID(TEXT(ABS(D2),"000000000000000"),8,1)" puluh "&MID(TEXT(ABS(D2),"000000000000000"),9,1)" juta ")&IF(--MID(TEXT(ABS(D2),"000000000000000"),10,3)=0,"",IF(--MID(TEXT(ABS(D2),"000000000000000"),10,3)=1,"*",MID(TEXT(ABS(D2),"000000000000000"),10,1)" ratus "&MID(TEXT(ABS(D2),"000000000000000"),11,1)" puluh ")&MID(TEXT(ABS(D2),"000000000000000"),12,1)" ribu ")&IF(--MID(TEXT(ABS(D2),"000000000000000"),13,3)=0,"",MID(TEXT(ABS(D2),"000000000000000"),13,1)" ratus "&MID(TEXT(ABS(D2),"000000000000000"),14,1)" puluh "&MID(TEXT(ABS(D2),"000000000000000"),15,1)),"satu"),"dua"),"tiga"),"empat"),"lima"),"enam"),"tujuh"),"delapan"),"sembilan"),"0 ratus",""),"0 puluh",""),"satu puluh 0","sepuluh"),"satu puluh satu","sebelas"),"satu puluh dua","duabelas"),"satu puluh tiga","tigabelas"),"satu puluh empat","empatbelas"),"satu puluh lima","limabelas"),"satu puluh enam","enambelas"),"satu puluh tujuh","tujuhbelas"),"satu puluh delapan","delapanbelas"),"satu puluh sembilan","sembilanbelas"),"satu ratus","seratus"),"*satu ribu","seribu"),0,""))"," "))
Bagaimana Rumus Excel Bekerja (Secara Garis Besar):
Rumus ini bekerja dengan cara memecah angka menjadi beberapa bagian berdasarkan kelompok tiga digit (ribuan, jutaan, miliar, triliun, dan satuan). Untuk setiap kelompok tiga digit, rumus ini mengonversinya menjadi representasi kata-kata untuk ratusan, puluhan, dan satuan.
- Penanganan Nol dan Negatif: Bagian awal rumus menangani kasus jika angka adalah nol atau negatif.
- Ekstraksi Kelompok Digit: Fungsi
MID
danTEXT
digunakan untuk mengekstrak setiap kelompok tiga digit dari angka absolut. Angka terlebih dahulu diubah menjadi teks dengan format 15 digit (ditambah leading zeros jika perlu). - Konversi per Kelompok: Untuk setiap kelompok tiga digit, serangkaian fungsi
IF
danSUBSTITUTE
digunakan untuk mengonversi angka menjadi kata-kata. Logika ini mencakup penanganan angka ratusan, puluhan, dan satuan, termasuk kasus khusus seperti angka belasan. - Penggabungan Kata: Hasil konversi dari setiap kelompok digit kemudian digabungkan dengan menambahkan tingkatan satuan yang sesuai (triliun, miliar, juta, ribu).
- Koreksi dan Pembersihan: Fungsi
SUBSTITUTE
digunakan berkali-kali untuk mengganti frasa yang tidak tepat (misalnya, "satu ratus" menjadi "seratus", "satu ribu" menjadi "seribu", dan menghilangkan "nol ratus" atau "nol puluh"). FungsiTRIM
digunakan untuk menghilangkan spasi berlebih.
Keuntungan Menggunakan Rumus Excel:
- Tidak Memerlukan VBA: Cocok untuk pengguna yang tidak familiar atau memiliki batasan dalam menggunakan kode VBA.
- Langsung Terintegrasi: Rumus dapat langsung dimasukkan ke dalam sel tanpa perlu membuka VBA editor.
Keterbatasan Menggunakan Rumus Excel:
- Kompleksitas: Rumusnya sangat panjang dan sulit dipahami atau dimodifikasi.
- Potensi Kesalahan: Karena kompleksitasnya, ada potensi lebih besar untuk kesalahan penulisan rumus.
- Keterbatasan Penyesuaian: Jika ada perubahan format terbilang yang diinginkan, memodifikasi rumus yang sudah ada bisa menjadi tugas yang rumit.
🖨️ Kode VBA untuk Mencetak Semua Data
Tambahkan kode ini di module yang sama:
Sub CetakSemuaKuitansi()
Dim wsData As Worksheet
Dim wsKuitansi As Worksheet
Dim i As Integer, lastRow As Integer
Set wsData = Sheets("Data")
Set wsKuitansi = Sheets("Kuitansi")
lastRow = wsData.Cells(wsData.Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow
' Update referensi rumus di template
wsKuitansi.Range("B2").Formula = "=Data!B" & i
wsKuitansi.Range("B3").Formula = "=Data!C" & i
wsKuitansi.Range("B4").Formula = "=Data!D" & i
wsKuitansi.Range("B5").Formula = "=Data!E" & i
wsKuitansi.Range("B6").Formula = "=Terbilang(Data!D" & i & ")"
' Cetak sheet Kuitansi
wsKuitansi.PrintOut
Next i
MsgBox "Semua kuitansi berhasil dicetak!", vbInformation
End Sub
▶️ Cara Menjalankan Makro
Tekan Alt + F8, pilih CetakSemuaKuitansi, dan klik Run. Semua kuitansi akan dicetak otomatis sesuai data.
💡 Tips Tambahan
- Gunakan Print Preview atau ubah PrintOut ke PrintPreview dulu untuk mengecek tampilan.
- Tambahkan nomor kuitansi otomatis:
="KW-"&TEXT(ROW(A1),"000")
- Cetak ke PDF? Tambahkan baris:
wsKuitansi.ExportAsFixedFormat Type:=xlTypePDF, Filename:="Kuitansi_" & i & ".pdf"
✅ Penutup
Dengan kombinasi template sederhana, fungsi terbilang, dan VBA, proses pembuatan dan pencetakan kuitansi jadi otomatis dan efisien. Anda bisa menyesuaikan desain sesuai instansi atau kebutuhan profesional.
Komentar
Posting Komentar