Belajar VBA - Sub vs Function (UDF)
Episode 7 of 25

Belajar VBA - Sub vs Function (UDF)

Membedah perbedaan Sub dan Function: prosedur tindakan tanpa nilai kembali vs fungsi yang mengembalikan nilai, cara membuat UDF custom formula yang bisa dipakai langsung di sel Excel, serta memahami ByVal dan ByRef

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Sejauh ini semua macro kita berbentuk Sub. Episode ini memperkenalkan pasangannya: Function. Keduanya mirip secara tampilan, tetapi punya peran yang sangat berbeda — dan memahami perbedaannya membuka kemampuan VBA paling disukai pengguna Excel: membuat formula sendiri (UDF).

Mengapa ini penting? Karena di dunia kerja, pertanyaan "bisakah Excel melakukan ini?" sering dijawab dengan "belum ada formulanya, tapi bisa kita buat". UDF adalah jawaban itu: fungsi VBA yang dipakai persis seperti SUM atau VLOOKUP, namun dirancang untuk kebutuhan spesifik tim kalian.

Sub: Prosedur Tindakan

Sub (subroutine) adalah prosedur yang menjalankan aksi tanpa mengembalikan nilai. Ia adalah pekerja: memformat, menghapus, mengirim, mencetak.

Sub - aksi tanpa nilai kembali
Sub BersihkanData()
    Range("A1:C100").ClearContents
    Range("A1").Select
End Sub

Ciri khas Sub:

  • Tidak mengembalikan nilai apa pun.
  • Dipanggil dengan perintah Sub Nama(...).
  • Bisa dipicu tombol, event, atau dipanggil dari Sub lain.
  • Di Excel, bisa dijalankan dari dialog Macros (Alt+F8).

Contoh panggilan antar Sub:

Memanggil Sub dari Sub lain
Sub ProsesSemua()
    BersihkanData
    IsiLaporan
    KirimEmail
End Sub

Function: Mengembalikan Nilai

Function mengembalikan satu nilai ke pemanggilnya. Ia adalah kalkulator: diberi masukan, menghasilkan keluaran.

Function sederhana
Function KaliDua(angka As Double) As Double
    KaliDua = angka * 2
End Function

Perhatikan detail penting: nilai kembali diisi dengan menetapkan nama fungsi itu sendiriKaliDua = angka * 2. Tidak ada kata kunci return seperti di bahasa lain.

Function bisa dipanggil dari kode:

Memanggil Function dari Sub
Sub PakaiFunction()
    Dim hasil As Double
    hasil = KaliDua(21)
    MsgBox "Hasil: " & hasil
End Sub

UDF: Function yang Menjadi Formula Excel

Inilah kekuatan puncak Function: jika sebuah Function diletakkan di Standard Module, ia otomatis tersedia sebagai formula di Excel.

Module1 - UDF sederhana
Function Diskon(harga As Double, persen As Double) As Double
    Diskon = harga * (1 - persen)
End Function

Setelah fungsi ini ada, kalian bisa menulis formula berikut langsung di sel Excel:

Rumus di selHasil
=Diskon(1000; 0.1)900
=Diskon(B2; C2)Mengambil nilai dari sel B2 dan C2

Tip

Di Excel berbahasa Indonesia, pemisah argumen formula adalah titik koma (;), bukan koma. Saat menulis UDF di kode tetap gunakan koma sebagai pemisah argumen prosedur — perbedaan pemisah hanya berlaku di sisi formula sel.

UDF yang Dikalkulasi Ulang Otomatis

UDF standar tidak selalu menghitung ulang saat data berubah. Untuk memaksa kalkulasi ulang, deklarasikan fungsi dengan Application.Volatile:

UDF volatile
Function SekarangKustom() As Date
    Application.Volatile
    SekarangKustom = Now
End Function

Application.Volatile memberi tahu Excel agar menghitung ulang fungsi ini setiap kali workbook menghitung ulang apa pun.

UDF Range: Menerima Banyak Sel

UDF bisa menerima rentang sel sebagai argumen:

UDF untuk jumlah dengan warna
Function HitungHijau(rng As Range) As Long
    Dim cell As Range
    Dim total As Long
    For Each cell In rng
        If cell.Interior.Color = RGB(0, 255, 0) Then
            total = total + 1
        End If
    Next cell
    HitungHijau = total
End Function

Dengan ini, =HitungHijau(A1:A100) menghitung berapa sel yang berlatar hijau — sesuatu yang mustahil dengan formula standar.

Warning

UDF yang membaca properti seperti Interior.Color hanya menghitung ulang saat sel berubah, bukan saat format berubah — ini keterbatasan yang sering mengejutkan. Untuk kebutuhan itu, alternatifnya Application.Volatile atau solusi non-UDF. Jangan bangun laporan penting tanpa menguji kapan UDF memperbarui nilainya.

ByVal vs ByRef: Cara Argumen Diterima

Saat memanggil prosedur dengan argumen, penting bagaimana argumen itu diserahkan.

Kata kunciPerilakuDampak
ByValNilai disalin ke prosedurPerubahan di dalam prosedur tidak memengaruhi variabel asal
ByRef (default)Referensi asli diteruskanPerubahan di dalam prosedur mengubah variabel asal
ByVal vs ByRef
Sub UjiCoba()
    Dim angka As Long
    angka = 10
    TambahByVal angka
    MsgBox angka      ' tetap 10
    TambahByRef angka
    MsgBox angka      ' menjadi 11
End Sub
 
Sub TambahByVal(ByVal x As Long)
    x = x + 1
End Sub
 
Sub TambahByRef(ByRef x As Long)
    x = x + 1
End Sub

Jika tidak menulis ByVal/ByRef, VBA memakai default ByRef. Untuk argumen yang tidak perlu dimodifikasi, deklarasikan ByVal secara eksplisit — menghindari perubahan tak sengaja pada variabel pemanggil.

Kapan Memakai Sub vs Function

SituasiPilih
Menjalankan aksi (format, hapus, kirim)Sub
Menghitung dan mengembalikan nilaiFunction
Membuat formula custom yang dipakai di selFunction (di Standard Module)
Di-trigger tombol/eventSub

Aturan sederhana: Sub untuk perintah, Function untuk nilai. Jika kalian menemukan Function yang tidak mengembalikan nilai atau Sub yang hanya menghitung, kemungkinan besar kalian memilih jenis yang salah.

Common Pitfalls

KesalahanDampak
Lupa menetapkan nilai ke nama FunctionFungsi mengembalikan 0 / string kosong
Membuat UDF di modul worksheet/ThisWorkbookTidak bisa dipakai di sel
Mengandalkan UDF Interior yang tidak volatileNilai basi saat format berubah
ByRef tak sengaja mengubah variabel pemanggilEfek samping tak terduga

Penutup

Pada episode 7 ini, kalian telah membedakan dua jenis prosedur VBA dan membuat fungsi sendiri yang dipakai di sel Excel.

Inti yang harus dibawa pulang:

  • Sub menjalankan aksi tanpa mengembalikan nilai; Function mengembalikan nilai.
  • Function mengisi nilai kembali dengan NamaFungsi = nilai.
  • Function di Standard Module otomatis menjadi UDF yang bisa dipakai sebagai formula Excel.
  • Application.Volatile mengontrol kapan UDF menghitung ulang.
  • ByVal menyalin nilai; ByRef meneruskan referensi asli.

Di episode 8 selanjutnya kita masuk ke inti otomasi Excel: Excel Object Model — hierarki Application, Workbook, Worksheet, dan Range — lengkap dengan praktik membaca dan menulis sel, Cells(r,c), UsedRange, dan CurrentRegion. Sampai jumpa di episode 8!

Belajar VBA - Sub vs Function (UDF) | Belajar VBA