Memberi kecerdasan pada macro: operator perbandingan dan logika, percabangan dengan If Then ElseIf dan Select Case, serta perulangan For Next For Each dan Do Loop untuk mengotomasi tugas berulang

Setelah di episode 5 kalian mengenal variabel dan tipe data, sekarang saatnya memberi kecerdasan pada macro. Variabel hanyalah kotak penyimpanan — yang membuat kode hidup adalah keputusan ("jika ini, lakukan itu") dan perulangan ("ulangi 1000 kali"). Inilah operator, kondisi, dan loop.
Mengapa ini penting? Karena otomasi pada dasarnya adalah menjalankan keputusan dan pengulangan tanpa manusia. Laporan berjalan otomatis hanya jika kode bisa memutuskan apa yang benar dan mengulanginya untuk setiap baris — tanpa dua kemampuan ini, macro hanyalah kumpulan perintah sekali jalan.
| Operator | Fungsi | Contoh |
|---|---|---|
+ | Penjumlahan | a + b |
- | Pengurangan | a - b |
* | Perkalian | a * b |
/ | Pembagian | a / b |
^ | Pangkat | 2 ^ 3 (= 8) |
Mod | Sisa bagi | 10 Mod 3 (= 1) |
| Operator | Arti |
|---|---|
= | sama dengan |
<> | tidak sama dengan |
< | lebih kecil |
> | lebih besar |
<= | lebih kecil atau sama dengan |
>= | lebih besar atau sama dengan |
| Operator | Arti |
|---|---|
And | benar jika keduanya benar |
Or | benar jika salah satu benar |
Not | membalik nilai (True → False) |
Kombinasi contohnya: If skor >= 75 And kehadiran >= 80 Then — hanya lulus jika dua-duanya terpenuhi.
Bentuk paling dasar pengambilan keputusan:
Sub CekNilai()
Dim skor As Double
skor = Range("B2").Value
If skor >= 75 Then
Range("C2").Value = "Lulus"
Else
Range("C2").Value = "Remedial"
End If
End SubUntuk keputusan berjenjang:
If skor >= 90 Then
Range("C2").Value = "A"
ElseIf skor >= 80 Then
Range("C2").Value = "B"
ElseIf skor >= 70 Then
Range("C2").Value = "C"
Else
Range("C2").Value = "D"
End IfPerhatikan urutan: kondisi diperiksa dari atas ke bawah, dan pemeriksaan berhenti pada kondisi pertama yang benar. Maka susun dari kondisi paling ketat ke paling longgar.
Tip
If satu baris tanpa End If (If x Then y = 1) tetap valid di VBA, tetapi sulit dibaca dan rawan error. Biasakan blok penuh dengan End If — kode lebih mudah dipelihara dan menyisipkan baris baru tidak merusak logika.
Saat pilihan nilai banyak, Select Case lebih rapi daripada rentetan ElseIf:
Select Case Range("B2").Value
Case "A", "B"
Range("C2").Value = "Bagus"
Case "C"
Range("C2").Value = "Cukup"
Case "D"
Range("C2").Value = "Kurang"
Case Else
Range("C2").Value = "Tidak valid"
End SelectSelect Case juga mendukung rentang nilai:
Select Case skor
Case Is >= 90
grade = "A"
Case 80 To 89
grade = "B"
Case 70 To 79
grade = "C"
Case Else
grade = "D"
End SelectKapan memilih mana? If...ElseIf unggul untuk kondisi logika kompleks; Select Case unggul untuk banyak pilihan nilai atau rentang — lebih pendek dan lebih mudah diikuti.
Loop dengan jumlah pasti — misalnya mengisi 100 baris:
Dim i As Long
For i = 1 To 100
Cells(i, 1).Value = i * 2
Next iKontrol tambahan: Step untuk lompatan, Exit For untuk berhenti lebih awal:
Dim i As Long
For i = 10 To 1 Step -1
If Cells(i, 2).Value = "" Then Exit For
Next iLoop ini berjalan mundur dari baris 10 ke 1 dan berhenti saat menemukan sel kosong.
Jika kalian ingin mengunjungi setiap objek dalam kumpulan — setiap sel dalam range, setiap sheet dalam workbook — For Each adalah pilihan paling ekspresif:
Dim cell As Range
For Each cell In Range("A1:A100")
cell.Value = UCase(cell.Value)
Next cellBacanya: "untuk setiap cell di dalam range A1:A100, jadikan teksnya huruf besar". Tidak perlu menebak jumlah iterasi — VBA menelusuri semuanya. Versi "naikkan huruf seluruh kolom" ini akan kita pakai lagi di episode 9.
Saat jumlah pengulangan belum diketahui — terus berjalan selama kondisi benar:
Dim r As Long
r = 1
Do While Cells(r, 1).Value <> ""
r = r + 1
Loop
' r sekarang menunjuk baris kosong pertamaDan varian Loop While yang memeriksa kondisi setelah badan dijalankan — menjamin badan tereksekusi minimal sekali:
Dim attempt As Long
attempt = 0
Do
attempt = attempt + 1
Loop While attempt < 3Pilihan Do While...Loop vs Do...Loop While bergantung pada urutan pemeriksaan yang kalian inginkan.
| Kesalahan | Dampak |
|---|---|
Kondisi ElseIf tidak berurutan | Logika cabang salah |
Infinite loop (Do While True tanpa jalan keluar) | Excel hang |
Modifikasi koleksi saat di-loop dengan For Each | Error runtime; kumpulkan target, hapus setelah loop |
| Membaca/menulis sel per iterasi tanpa batas | Macro sangat lambat (dibahas di episode 10) |
Warning
Jangan menghapus baris di dalam For Each cell In Range — mengubah ukuran range saat di-loop membuat Excel bingung. Pola yang benar: tandai dulu, baru hapus setelah loop selesai. Kita praktikkan di episode 9.
Pada episode 6 ini, kalian telah menguasai kontrol alur yang menghidupkan macro.
Inti yang harus dibawa pulang:
+, *, Mod), perbandingan (=, <>, <, >, <=, >=), logika (And, Or, Not).If...ElseIf...Else untuk keputusan; Select Case untuk banyak pilihan atau rentang.For...Next untuk jumlah pasti, For Each untuk menelusuri koleksi objek, Do While/Until untuk jumlah tak tentu.For Each; jangan biarkan loop tanpa jalan keluar.Di episode 7 selanjutnya kita akan membedah perbedaan krusial Sub vs Function — prosedur tindakan tanpa nilai kembali vs fungsi yang mengembalikan nilai dan bisa dipakai sebagai UDF (custom formula) di Excel, lengkap dengan ByVal/ByRef. Sampai jumpa di episode 7!