Function Procedure Pada VBA Excel #08

Function Procedure Pada VBA Excel #08

Tutorial lengkap tentang Function Procedure pada VBA Excel yang juga disebut sebagai Custom Function atau User Defined Funtion (UDF). Juga menjelaskan penggunaan tentang keyword ByRef dan ByVal pada argument procedure VBA.
Function Procedure Pada VBA Excel

Salah satu halaman yang paling banyak dikunjungi di web tutorial excel ini adalah halaman tentang addin terbilang excel. Sebuah addin yang menyediakan fungsi tambahan untuk merubah angka menjadi teks terbilang. Namun, tahukah anda bahwa addin tersebut sebetulnya di buat dengan function procedure?

Apa itu function procedure?

Setelah membahas tentang Sub Procedure dan bagaimana cara memanggilnya, seri tutorial VBA Excel kali ini akan mengajak anda untuk mempelajari dan memahami bagaimana membuat sebuah function procedure atau prosedur fungsi pada VBA Excel.




PENGERTIAN FUNCTION PROCEDURE


Dalam pembahasan Macro VBA Excel, Procedure adalah sebuah blok kode program yang berisi baris-baris perintah tertentu di antara baris statement pembuka dan statement penutup prosedure. Lebih jelasnya bisa anda baca pada seri berikut: Module dan Procedure VBA Excel.

Function procedure pada VBA Excel adalah salah satu jenis procedure yang ditandai dengan statement pembuka "Function" dan diakhiri dengan Statement "End Function".

Dalam proses kerjanya function procedure sebenarnya sama dengan Sub Procedure yang sudah kita bahas sebelumnya. Perbedaan utama dari kedua jenis procedure ini adalah bahwa Function Prosedur dapat menghasilkan suatu nilai balik (return value) dari proses kerjanya yang tersimpan didalam nama prosedurnya.

Cara kerja sebuah function procedure memang sangat mirip dengan fungsi-fungsi bawaan excel seperti fungsi SUM, fungsi AVERAGE, fungsi MIN-MAX dan lain sebagainya, dimana kita bisa memasukkan argumen-argumen tertentu ke dalam sebuah procedur function, kemudian fungsi tersebut melakukan kalkulasi kemudian mengembalikan sebuah hasil dari kalkulasi tersebut.

Prosedur fungsi yang dideklarasikan dengan keyword Public dapat digunakan sebagai rumus excel pada sebuah cell excel seperti fungsi bawaan Excel. Sebab itu prosedur function juga disebut sebagai Custom Function serta User Defined Funtion (UDF).

Dan untuk alasan yang sama, di blog ini saya lebih cenderung menyebut default worksheet function sebagai sebuah fungsi dan bukan rumus excel. Hal ini pernah saya singung pada pembahasan tentang Pengenalan rumus dan fungsi pada Microsoft Excel.

CARA MEMBUAT FUNCTION PROCEDURE


Barangkali anda bertanya bagaimana membuat fungsi atau rumus sendiri di excel?

Jika fungsi-fungsi default atau fungsi bawaan yang excel sediakan belum mencukupi, anda bisa membuat sebuah fungsi excel sendiri. Caranya yakni membuat sebuah custom function atau user defined function (UDF) dengan membuat sebuah public function melalui VBA Excel.

Sintax atau cara membuat function procedure pada sebuah modul VBA adalah sebagi berikut:

[Private|Public|Friend][Static] Function Nama_Fungsi ([List_Argumen]) As [Return_Data_Type]
[Instruksi/Kode Program]
[Exit Function]
[Instruksi/Kode Program]
[Nama_Fungsi = Return_Value]
End Function

Setiap elemen yang ada di dalam kurung siku "[...]" pada sintax prosedur function di atas bersifat opsional, artinya boleh digunakan dan boleh diabaikan atau tidak digunakan.

Contoh sederhana sebuah function procedure adalah sebagai berikut:

Function luasPersegi(panjang As Integer) As Long
    Dim luas As Long

    luas = panjang * panjang
    luasPersegi = luas
End Function

Elemen [Private|Public|Friend][Static]


Karena sudah beberapa dijelaskan pada beberapa seri sebelumnya element ini tidak akan saya bahas lagi. Untuk mempelajari maksudnya silahkan baca materi-materi seri macro VBA Excel sebelumnya.

Elemen "Function"


Teks atau element "Function" ini wajib anda gunakan jika anda bermaksud membuat sebuah Function procedure.

Elemen inilah membedakan penyusunan prosedur function dengan jenis procedure lainnya.

Elemen "Nama_Prosedur"


Bagian ini menunjukkan nama prosedur function yang anda buat dan harus anda gunakan. Nama Fungsi inilah yang akan digunakan untuk memanggil atau digunakan pada worksheet. Jadi namailah function procedure yang anda buat sebijak mungkin. Idealnya silahkan mencontoh bagiamana office excel menamai fungsi-fungsi default yang sudah tersedia.

Seperti yang sudah dijelaskan pada pembahasan tentang procedure VBA, nama fungsi ini juga mengikuti beberapa aturan berikut:
  1. Karakter pertama harus berupa Letter Abjad (A-Z,a-z).
  2. Karakter berikutnya dapat berupa huruf, angka atau karakter tanda baca tertentu (tidak semua tanda baca bisa digunakan).
  3. Tidak boleh memakai titik (.) Dan spasi ( ) juga tidak bisa memakai karakter berikut: #, $,%, &, @, ^, * dan !.
  4. Tidak ada perbedaan antara huruf besar dan huruf kecil.
  5. Jumlah maksimum karakter yang bisa digunakan adalah 255.

Elemen [List_Argumen]


Bagian ini menunjukkan list atau daftar variabel yang mewakili argumen yang digunakan pada prosedur function saat dipanggil atau digunakan.

Tentang List Argument Fungsi ini akan dibahas tersendiri di bagian bawah nanti.

Wah, kenapa tidak sekarang saja bang? Suka-suka saya donk ekekekeke....

Elemen "As [Return_Data_Type]"


Element ini di isi dengan tipe data VBA di awali dengan keyword "As" seperti saat mendeklarasikan sebuah variabel.

Bagian ini menunjukkan tipe data yang akan dihasilkan oleh fungsi yang kita buat. Penulisannya misalnya: As Integer, As Long, As String, dan lain sebagainya.

Jenis atau tipe data apa saja yang bisa digunakan? Silahkan baca pada seri berikut:

Elemen [Instruksi/Kode Program]


Instruksi/Kode Program merupakan baris-baris kode perintah yang akan dilakukan oleh Function procedure saat dijalankan atau dipanggil.

Isinya tentunya menyesuaikan kebutuhan atau keinginan anda yang pada intinya adalah proses kalkulasi tertentu oleh prosedure terkait saat dipanggil.

Elemen [Exit Function]


Idealnya sebuah baris kode akan berakhir saat mencapai "End Function". Namun, dalam kondisi tertentu anda dapat keluar dari function procedure dengan menggunakan perintah "Exit Function".

Baris kode "Exit Function" merupakan perintah untuk keluar dari Function Procedure terkait. "Exit Function" menandakan bahwa prosedur function harus di akhiri dan tidak dilanjutkan ke baris-baris program selanjutnya.

Elemen "Nama_Fungsi = Return_Value"


Di atas sudah dijelaskan bahwa sebuah prosedur function dapat menghasilkan sebuah nilai balik (Return Value) dari proses kerjanya.

Lalu bagaimana kita memberi tahu return value ini kepada sebuah function procedure?

Untuk memberi tahu sebuah function procedure nilai apa yang harus di kembalikan atau dihasilkan, caranya yakni dengan menetapkan nilai tersebut kepada nama fungsinya.

Penulisan baris kodenya yakni dengan menuliskan nama fungsi diikuti dengan sama dengan (=) dan nilai yang ingin dihasilkan atau dikembalikan.

Perhatikan lagi contoh function procedure berikut:

Function luasPersegi(panjang As Integer) As Long
    'Deklarasi variabel luas
    Dim luas As Long

    'Menghitung luas persegi sesuai argumen panjang yang diberikan
    luas = panjang * panjang
    'Assign return value kepada fungsi luasPersegi
    luasPersegi = luas
End Function

Pada contoh di atas baris kode "luasPersegi = luas" memberitahukan kepada fungsi luasPersegi bahwa nilai yang harus dihasilkan olehnya adalah nilai dari variabel luas yang didapatkan dari hasil perkalian argumen panjang * panjang.

Jadi pada kasus ini nama fungsi juga bekerja sebagai sebuah variabel.

Biasanya baris kode yang memberitahukan nilai yang harus dikembalikan oleh fungsi semacam ini dituliskan pada bagian akhir fungsi sebelum "End Function" atau "Exit Function".

Sebagai catatan tambahan bahwa fungsi luasPersegi di atas bisa juga anda ringkas menjadi berikut:

Function luasPersegi(panjang As Integer) As Long
    'Menghitung luas sekaligus Assign return value kepada fungsi luasPersegi
    luasPersegi = panjang * panjang
End Function

Pastikan bahwa saat memberi tahukan nilai balik ini kepada sebuah fungsi, nilai yang diberikan merupakan nilai akhir dari sebuah proses kalkulasi yang mungkin cukup panjang.

Elemen "End Function"


Bagian ini menandai akhir sebuah Function Procedure.

Saat anda menekan Enter untuk menyelesaikan penulisan deklarasi pembuka saat membuat sebuah procedure baru biasanya Statement penutup prosedur function ini akan otomatis dibuat pada VBE (Visual Basic Editor).

ARGUMENT PADA FUNCTION PROCEDURE


Saya yakin anda sudah sangat familiar dengan istilah argument pada sebuah fungsi excel.

Secara umum argument ini memang lebih sering digunakan pada function procedure, meskipun demikian pada dasarnya list argument ini bisa juga anda gunakan pada prosedur jenis Sub (Subroutine) yang sudah kita bahas pada seri sebelumnya.

Penulisan daftar argument berada diantara tanda kurung (...) setelah nama prosedur. Cara penulisannya mirip dengan deklarasi variabel pada Macro VBA Excel, namun tanpa menyertakan scope.

Penulisan argument di awali dengan nama argument kemudian diikuti dengan tipe datanya dan bisa juga disertai keyword lain seperti ByVal atau ByRef serta statement Optional, sedangkan pada deklarasi variabel tidak ada.

Jika terdapat lebih dari satu argument maka penulisannya dipisahkan dengan tanda koma(,).

Perhatikan contoh prosedur fungsi dengan nama DISKON berikut ini:

Function DISKON(jumlah As Long, harga As Currency, Optional persen As Double = 0.01)

    DISKON = jumlah * harga * persen

End Function

Function Procedure dengan nama DISKON diatas menggunakan 3 argumen yang masing-masing adalah: jumlah, harga dan persen.

Argument Procedure


Saat sebuah procedure disertai argument, maka untuk memanggil prosedur tersebut juga harus memberikan nilai input terhadap argument-argumentnya. Misal untuk menggunakan fungsi DISKON di atas pada sebuah sel sebagai sebuah rumus excel anda dapat menuliskan rumus berikut untuk menggunakannya:

=DISKON(5;10000;0,1)

Nilai angka 5 adalah jumlah, 10000 adalah harga dan 0,1 yang senilai dengan 10% adalah untuk argumen persen.

Rumus ini berlaku jika anda menggunakan setting regional Indonesia yang menggunakan titik koma(;) sebagai pemisah argument dan koma(,) sebagai pemisah desimal.

Apabila anda menggunakan setting region default yang biasanya masih Engish maka rumus pada sel excel yang anda gunakan adalah sebagai berikut:

=DISKON(5,10000,0.1)

"Pada penulisan script VBA anda tetap harus menggunakan koma sebagai pemisah argument dan titik(.) sebagai pemisah desimal meskipun menggunakan regional setting Indonesia.

Keyword Optional


Seperti pada fungsi-fungsi bawaan excel, anda bisa juga membuat argumen sebagai argumen opsional yang saat dipanggil tidak harus diisi nilainya. Untuk mengatur argument opsional tambahkan keyword "Optional" sebelum nama argument.

Argument opsional ini bisa juga anda tetapkan nilai defaultnya saat prosedur pemanggil tidak menyertakannya. Pada contoh fungsi DISKON diatas, argument opsional adalah persen dengan nilai default 0.01 (1%).

Optional persen As Double = 0.01

Nilai default 0.01 ini akan diabaikan jika saat memanggil fungsi DISKON anda menyertakan nilai persennya seperti contoh sebelumnya. Jika tidak diisi maka nilai default inilah yang akan dipakai.

Pada sel excel anda dapat memanggil fungsi DISKON dengan cara seperti ini:

=DISKON(5;10000)

Rumus excel diatas akan menghasilkan angka 500 yang didapatkan dari perhitungan 5*10000 dan dikalikan 0,01 atau 1% sebagai nilai default persen sebab anda tidak menyertakan nilai persen saat pemanggilan fungsi DISKON.

Untuk membuat argument yang bersifat opsional awali penulisan argument dengan keyword "Optional" yang diikuti dengan nama argument dan apabila diperlukan tetapkan nilai defaultnya dengan cara menuliskan sama dengan (=) kemudinan diikuti dengan nilai default yang ingin anda tetapkan.

Keyword ByVal dan ByRef


Pada penyusunan argument prosedur baik jenis function atau Sub anda dapat juga menyertakan keyword ByVal atau ByRef.

Keyword ByRef merupakan keyword default, sehingga pada penyusunan argument fungsi DISKON diatas anda dapat juga menuliskannya dengan cara seperti ini:

Function DISKON(ByRef jumlah As Long, ByRef harga As Currency, Optional ByRef persen As Double = 0.01)

    DISKON = jumlah * harga * persen

End Function

Apa maksud dari penggunaan keyword ByRef dan ByVal ?

Keyword ByVal dan ByRef pada dasarnya menunjukkan bagaimana sebuah nilai argument yang diberikan oleh pemanggil akan digunakan oleh prosedur yang dipanggil. Apakah nilai argument yang dilewatkan diambil nilainya (Value) saja atau diperlakukan sebagai sebuah referensi (Reference).
  • Keyword ByRef: Mengirimkan lokasi memori suatu nilai yang diberikan kedalam sebuah argumen. Argumen akan diisi dengan wujud data tersebut secara langsung, oleh karena itu nilai variabel dapat diubah di dalam prosedur sub atau fungsi.
  • Keyword ByVal: Argumen akan diisi dengan salinan nilai data saja, dengan kata lain ByVal mengirimkan suatu nilai yang diberikan kedalam sebuah argumen dan kemudian argumen menyalin nilai tersebut untuk dimanfaatkan. Prosedur berargumen hanya akan mengubah salinan nilai dan nilai asli tidak akan berubah sama sekali

Saya kehabisan kata-kata untuk menjelaskan tentang ByRef dan ByVal ini. Untuk lebih jelasnya kita praktekkan saja.

Silahkan buat prosedur sub dan fungsi berikut pada sebuah Standart modul:

Option Explicit

Function VOLUMEKUBUS(ByRef panjang As Long) As Long
    panjang = panjang ^ 3
    VOLUMEKUBUS = panjang
End Function

Sub tesVolume()
    Dim panjang As Long
    panjang = 10

    'Panggil fungsi VOLUMEKUBUS dan munculkan nilai hasil pada sebuah Mesage Box
    MsgBox "Volume Kubus = " & VOLUMEKUBUS(panjang)

    'Munculkan nilai variabel panjang pada sebuah Mesage Box
    MsgBox "Variabel Panjang = " & panjang
End Sub

Jika sudah coba jalankan prosedur tesVolume. Hasilnya adalah 2 message box berikut:

Perhatikan nilai angka yang dimunculkan pada 2 message box tersebut. Message box pertama merupakan hasil dari fungsi VOLUMEKUBUS, sedangkan yang kedua adalah nilai dari variabel panjang.

Menggunakan ByRef pada Argumen Function Procedure



Selanjutnya ubah keyword ByRef dengan ByVal pada argument panjang, kemudian jalankan lagi prosedur tesVolume. Hasilnya adalah 2 message box berikut:

Menggunakan ByVal pada Argumen Function Procedure



Perhatikan perbedaan pada message box ke-2 pada dua latihan di atas.

Ketika melewatkan argumen dengan referensi (ByRef), kita mengacu pada nilai asli. Nilai panjang diubah dalam fungsi (panjang = panjang ^ 3). Kemudian variabel panjang ini dipanggil lagi melalui message box ke-2(MsgBox panjang). Sebagai hasilnya, MsgBox kedua menampilkan nilai 1000.

Saat mengirimkan argumen berdasarkan nilai (ByVal), kita mengirimkan salinan nilai ke fungsi (VOLUMEKUBUS(10)). Nilai panjang asli tidak berubah. Akibatnya, MsgBox kedua menampilkan nilai 10 (nilai asli).

Anda tambah bingung? Jika anda menemukan halaman ini secara tidak sengaja saya sarankan membaca beberapa seri panduan macro VBA Excel sebelumnya sehingga anda akan mendapatkan konteks pemahaman yang lebih lengkap.


Berikut file latihan yang saya gunakan pada tutorial kita kali ini.

Dropbox
GDrive

*Jika link mati / tidak dapat diakses silahkan lapor via kontak yang tersedia
LINK DOWNLOAD TERKUNCI.
Silahkan SHARE untuk membuka kunci!


Pada seri berikutnya kita akan belajar tentang bagaimana cara menggunakan atau memanggil function procedure, namun sebelum itu silahkan share Panduan ini sehingga lebih banyak lagi yang mendapatkan manfaatnya.

Silahkan bagikan tutorial excel ini di akun sosial media agar teman-teman Anda juga mendapatkan manfaat yang sama.

Pertanyaan, saran atau kritik, silahkan disampaikan pada kolom komentar yang tersedia.


Function Procedure Pada VBA Excel #08Tutorial lengkap tentang Function Procedure pada VBA Excel yang juga disebut sebagai Custom Function atau User Defined Funtion (UDF). Juga menjelaskan penggunaan tentang keyword ByRef dan ByVal pada argument procedure VBA.