Mengapa Kode Perlu Dibagi Menjadi Beberapa Bagian?
Bayangkan Anda membuat program VBA untuk mengolah data penjualan. Program tersebut harus melakukan beberapa pekerjaan, seperti:
-
Memvalidasi data.
-
Menghitung total penjualan.
-
Memberikan diskon.
-
Membuat laporan.
-
Menampilkan pesan kepada pengguna.
Apabila semua kode ditulis dalam satu prosedur, program akan menjadi sangat panjang, sulit dipahami, dan menyulitkan ketika harus diperbaiki atau dikembangkan.
Solusinya adalah membagi program menjadi beberapa bagian yang memiliki tugas masing-masing. Dalam VBA, bagian-bagian tersebut dikenal sebagai Procedure (Prosedur) dan Function (Fungsi).
Apa Itu Procedure (Sub)?
Procedure atau Sub Procedure adalah sekumpulan perintah yang dikelompokkan untuk menjalankan suatu tugas tertentu.
Sebuah Sub dapat dijalankan secara langsung, baik melalui VBA Editor, tombol (Button), maupun dipanggil oleh prosedur lain.
Karakteristik Sub:
-
Digunakan untuk menjalankan suatu proses.
-
Tidak mengembalikan nilai.
-
Dapat menerima parameter.
-
Dapat dipanggil berkali-kali dari berbagai bagian program.
Apa Itu Function?
Function adalah prosedur khusus yang selain menjalankan proses juga mengembalikan sebuah nilai (return value).
Nilai yang dikembalikan dapat digunakan:
-
dalam kode VBA,
-
pada rumus worksheet Excel,
-
maupun oleh prosedur lainnya.
Karakteristik Function:
-
Mengembalikan nilai.
-
Dapat menerima parameter.
-
Dapat dipanggil dari
Submaupun dari lembar kerja Excel (Worksheet Function).
Perbedaan Sub dan Function
| Sub Procedure | Function |
|---|---|
| Menjalankan proses | Menghasilkan nilai |
| Tidak mengembalikan nilai | Mengembalikan nilai |
| Dapat dipanggil secara langsung | Dipanggil untuk memperoleh hasil |
| Cocok untuk otomatisasi | Cocok untuk perhitungan |
Kapan Menggunakan Sub dan Function?
Gunakan Sub jika:
-
Mengubah isi worksheet.
-
Menghapus data.
-
Membuat laporan.
-
Menampilkan pesan.
-
Menjalankan proses otomatis.
Gunakan Function jika:
-
Menghitung diskon.
-
Menghitung pajak.
-
Menghitung total.
-
Menghasilkan nilai tertentu.
-
Membuat rumus sendiri di Excel.
Struktur Dasar Sub
Sintaks dasar:
Sub NamaProsedur()
'Kode Program
End Sub
Contoh:
Sub Salam()
MsgBox "Selamat Belajar VBA Excel"
End Sub
Ketika dijalankan, prosedur tersebut akan menampilkan sebuah kotak pesan.
Struktur Dasar Function
Sintaks dasar:
Function NamaFungsi() As TipeData
NamaFungsi = Nilai
End Function
Contoh:
Function Salam() As String
Salam = "Selamat Belajar VBA"
End Function
Nilai "Selamat Belajar VBA" akan dikembalikan oleh fungsi.
Memanggil Sebuah Sub
Sebuah Sub dapat memanggil Sub lainnya.
Sub Salam()
MsgBox "Halo"
End Sub
Sub Utama()
Call Salam
End Sub
Penulisan berikut juga diperbolehkan.
Sub Utama()
Salam
End Sub
Kedua cara tersebut menghasilkan proses yang sama.
Memanggil Sebuah Function
Misalnya terdapat fungsi berikut.
Function LuasPersegi(Sisi As Double) As Double
LuasPersegi = Sisi * Sisi
End Function
Pemanggilannya:
Sub Hitung()
Dim Hasil As Double
Hasil = LuasPersegi(10)
MsgBox Hasil
End Sub
Output:
100
Menggunakan Parameter
Parameter memungkinkan prosedur atau fungsi menerima nilai dari luar.
Contoh Sub.
Sub Sapa(Nama As String)
MsgBox "Halo, " & Nama
End Sub
Pemanggilan:
Sub Utama()
Sapa "Andi"
End Sub
Output:
Halo, Andi
Contoh Function.
Function Kali(A As Double, B As Double) As Double
Kali = A * B
End Function
Pemanggilan:
Sub Tes()
MsgBox Kali(5, 8)
End Sub
Output:
40
Studi Kasus 1
Membuat Prosedur untuk Membersihkan Data
Sub BersihkanData()
Range("A2:D100").ClearContents
End Sub
Dengan membuat prosedur khusus, Anda cukup memanggil BersihkanData setiap kali ingin menghapus isi data.
Studi Kasus 2
Membuat Function Menghitung Diskon
Function HitungDiskon(Harga As Double) As Double
HitungDiskon = Harga * 0.1
End Function
Pemanggilan:
Sub Contoh()
MsgBox HitungDiskon(250000)
End Sub
Output:
25000
Menggunakan Function di Worksheet
Salah satu kelebihan Function adalah dapat digunakan seperti rumus Excel.
Misalnya terdapat fungsi berikut.
Function LuasPersegi(Panjang As Double, Lebar As Double) As Double
LuasPersegi = Panjang * Lebar
End Function
Setelah disimpan, fungsi tersebut dapat digunakan langsung pada worksheet.
=LuasPersegi(10,5)
Hasilnya:
50
Best Practice
Gunakan Sub untuk proses.
Contohnya:
-
Menghapus data.
-
Menyalin data.
-
Membuat laporan.
-
Memformat worksheet.
Gunakan Function untuk perhitungan.
Contohnya:
-
Menghitung pajak.
-
Menghitung diskon.
-
Menghitung luas.
-
Menghitung komisi.
Berikan Nama yang Jelas
Kurang baik:
Sub A()
Lebih baik:
Sub CetakLaporan()
Pecah Program Menjadi Bagian Kecil
Daripada membuat satu prosedur berisi ratusan baris kode, lebih baik membaginya menjadi beberapa prosedur yang memiliki tugas spesifik.
Kesalahan yang Sering Terjadi
1. Menggunakan Function Padahal Tidak Mengembalikan Nilai
Kurang tepat:
Function Tes()
MsgBox "Halo"
End Function
Lebih tepat menggunakan:
Sub Tes()
MsgBox "Halo"
End Sub
2. Lupa Mengembalikan Nilai
Function Luas() As Double
End Function
Fungsi di atas akan mengembalikan nilai default karena tidak pernah memberikan nilai pada nama fungsi.
Perbaikan:
Function Luas() As Double
Luas = 100
End Function
3. Nama Procedure Tidak Deskriptif
Kurang baik:
Sub Test1()
Lebih baik:
Sub HitungTotalPenjualan()
Nama yang jelas akan memudahkan pemeliharaan program.
Ringkasan
Hal-hal penting yang perlu diingat:
-
Subdigunakan untuk menjalankan suatu proses. -
Functiondigunakan untuk menghasilkan suatu nilai. -
Keduanya dapat menerima parameter.
-
Functiondapat dipanggil dari worksheet Excel. -
Membagi program menjadi beberapa prosedur membuat kode lebih rapi dan mudah dipelihara.
Latihan Mandiri
Latihan 1
Buat sebuah Sub bernama TampilkanTanggal yang menampilkan tanggal hari ini menggunakan MsgBox.
Latihan 2
Buat sebuah Function bernama KelilingPersegiPanjang yang menerima parameter panjang dan lebar, kemudian mengembalikan hasil perhitungan keliling.
Latihan 3
Buat sebuah Sub yang memanggil Function untuk menghitung luas lingkaran, kemudian menampilkan hasilnya menggunakan MsgBox.
Latihan 4
Buat sebuah Function bernama GradeNilai yang menerima nilai angka dan mengembalikan grade:
-
A (90–100)
-
B (80–89)
-
C (70–79)
-
D (di bawah 70)
Kemudian gunakan fungsi tersebut pada worksheet Excel.
Kesimpulan
Sub Procedure dan Function merupakan fondasi penting dalam membangun aplikasi VBA yang terstruktur. Dengan memisahkan setiap tugas ke dalam prosedur atau fungsi yang sesuai, kode menjadi lebih mudah dibaca, digunakan kembali (reusable), dan dikembangkan di masa mendatang.
Memahami kapan harus menggunakan Sub dan kapan menggunakan Function akan membantu Anda menulis program VBA yang lebih efisien, modular, dan profesional.
