Saat menulis kode VBA, Anda mungkin pernah menggunakan objek
WorksheetFunctionuntuk menjalankan fungsi-fungsi Excel sepertiSUM,AVERAGE, atauVLOOKUP.
Sebagai contoh:
Application.WorksheetFunction.Sum(Range("A1:A10"))
Cara tersebut memang benar, tetapi tidak selalu menjadi pilihan yang paling praktis. Untuk rumus yang panjang atau melibatkan beberapa fungsi sekaligus, penulisan kode dapat menjadi cukup rumit.
Di sinilah Evaluate menjadi alternatif yang menarik. Dengan Evaluate, Anda dapat menjalankan rumus Excel langsung dari VBA tanpa harus menuliskannya ke dalam worksheet.
Apa Itu Evaluate?
Evaluate adalah metode milik objek Application yang digunakan untuk mengevaluasi sebuah ekspresi atau rumus Excel, kemudian mengembalikan hasilnya ke VBA.
Sintaks dasarnya adalah:
Application.Evaluate(Ekspresi)
atau dapat ditulis lebih singkat:
Evaluate(Ekspresi)
Parameter Ekspresi berupa teks (string) yang berisi rumus atau referensi Excel.
Menjalankan Fungsi SUM
Contoh paling sederhana adalah menghitung total nilai pada suatu range.
Dim Total As Double
Total = Evaluate("SUM(A1:A10)")
MsgBox Total
Rumus SUM dijalankan langsung oleh Excel, sedangkan hasilnya disimpan ke dalam variabel VBA.
Menggunakan Rumus AVERAGE
Selain SUM, hampir semua fungsi worksheet dapat digunakan.
Dim RataRata As Double
RataRata = Evaluate("AVERAGE(B2:B20)")
Kode tersebut menghasilkan nilai rata-rata dari range yang ditentukan.
Menggunakan Referensi Sel
Evaluate juga dapat mengevaluasi referensi sel.
Dim Nilai As Variant
Nilai = Evaluate("C5")
Hasilnya sama seperti membaca nilai menggunakan:
Range("C5").Value
Namun, Evaluate menjadi lebih berguna ketika referensi dibentuk secara dinamis.
Menggunakan Formula yang Dibentuk dari Variabel
Misalkan jumlah data berubah-ubah sehingga alamat range harus dibuat secara otomatis.
Dim LastRow As Long
Dim Total As Double
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
Total = Evaluate("SUM(A2:A" & LastRow & ")")
Dengan teknik ini, rumus akan selalu menyesuaikan jumlah data yang tersedia.
Menggunakan Fungsi IF
Evaluate juga dapat menjalankan rumus yang lebih kompleks.
Dim Hasil As Variant
Hasil = Evaluate("IF(A1>=75,""Lulus"",""Tidak Lulus"")")
Jika nilai pada A1 minimal 75, hasilnya adalah Lulus. Jika tidak, hasilnya Tidak Lulus.
Perhatikan penggunaan tanda kutip ganda ("") di dalam string rumus.
Menggunakan Evaluate untuk Mengembalikan Range
Tidak hanya menghasilkan nilai, Evaluate juga dapat mengembalikan objek Range.
Evaluate("A1:C5").Interior.Color = vbYellow
Kode tersebut memberi warna kuning pada range A1:C5.
Studi Kasus
Misalkan Anda ingin menghitung total penjualan tanpa menulis rumus pada worksheet.
Dim TotalPenjualan As Currency
TotalPenjualan = Evaluate("SUM(D2:D100)")
MsgBox "Total Penjualan : " & Format(TotalPenjualan, "#,##0")
Perhitungan dilakukan sepenuhnya di dalam VBA sehingga worksheet tetap bersih dari rumus tambahan.
Evaluate vs WorksheetFunction
| Evaluate | WorksheetFunction |
|---|---|
| Menjalankan rumus Excel dalam bentuk string | Memanggil fungsi Excel melalui objek VBA |
| Lebih fleksibel untuk rumus dinamis | Lebih jelas saat menggunakan fungsi tunggal |
| Dapat menjalankan ekspresi yang kompleks | Sintaks lebih panjang untuk rumus tertentu |
Dapat mengembalikan nilai maupun objek Range |
Umumnya mengembalikan nilai hasil fungsi |
Tidak ada metode yang lebih baik secara mutlak. Pilihlah yang paling sesuai dengan kebutuhan kode Anda.
Kesalahan yang Sering Dilakukan
Salah Menulis Rumus
Karena rumus ditulis dalam bentuk string, kesalahan penulisan akan menyebabkan Evaluate menghasilkan error atau nilai yang tidak sesuai.
Selalu uji rumus terlebih dahulu di worksheet sebelum memasukkannya ke dalam VBA.
Lupa Menggabungkan Variabel
Perhatikan contoh berikut.
Salah:
Evaluate("SUM(A2:ALastRow)")
Benar:
Evaluate("SUM(A2:A" & LastRow & ")")
Gunakan operator & untuk menyisipkan nilai variabel ke dalam rumus.
Menggunakan Evaluate untuk Semua Kasus
Walaupun fleksibel, Evaluate tidak selalu menjadi pilihan terbaik.
Untuk operasi sederhana seperti membaca nilai satu sel, penggunaan Range.Value biasanya lebih mudah dipahami.
Tips Praktis
💡 Gunakan Evaluate ketika rumus dibentuk secara dinamis.
💡 Uji rumus di worksheet sebelum digunakan dalam VBA.
💡 Kombinasikan Evaluate dengan variabel seperti LastRow agar rumus selalu menyesuaikan jumlah data.
💡 Gunakan WorksheetFunction jika hanya memanggil satu fungsi sederhana dan menginginkan kode yang lebih eksplisit.
💡 Hindari membuat string rumus yang terlalu panjang karena akan lebih sulit dibaca dan dipelihara.
Ringkasan
| Metode / Konsep | Fungsi |
|---|---|
Evaluate() |
Menjalankan rumus Excel dari VBA |
Application.Evaluate() |
Bentuk lengkap dari Evaluate |
| String Rumus | Menentukan ekspresi yang akan dievaluasi |
| Variabel | Membuat rumus menjadi dinamis |
WorksheetFunction |
Alternatif untuk menjalankan fungsi Excel |
Kesimpulan
Evaluate merupakan salah satu fitur VBA Excel yang memungkinkan Anda menjalankan rumus Excel langsung dari dalam kode. Kemampuannya mengevaluasi ekspresi, memanfaatkan fungsi worksheet, serta membentuk rumus secara dinamis membuat Evaluate sangat berguna dalam berbagai proses otomatisasi. Dengan memahami kapan harus menggunakan Evaluate dan kapan lebih tepat menggunakan WorksheetFunction, Anda dapat menulis kode yang lebih fleksibel, ringkas, dan mudah dikembangkan.
