For Each...Next di VBA Excel, Kapan Sebaiknya Digunakan?

Apakah Semua Perulangan Harus Menggunakan For...Next?

Ketika mulai belajar VBA Excel, sebagian besar programmer menggunakan For...Next untuk melakukan perulangan. Cara ini memang sangat efektif ketika Anda mengetahui jumlah pengulangan sejak awal.

Namun, bagaimana jika Anda ingin memproses seluruh sel dalam sebuah range, semua worksheet dalam workbook, atau seluruh file pada sebuah folder tanpa mengetahui jumlahnya?

Dalam kondisi seperti itu, menggunakan indeks seperti i = 1, i = 2, dan seterusnya justru membuat kode menjadi lebih panjang.

VBA menyediakan solusi yang lebih sederhana, yaitu For Each...Next.

Dengan perulangan ini, Anda dapat memproses setiap objek secara otomatis tanpa perlu mengetahui jumlahnya terlebih dahulu.


Apa Itu For Each...Next?

For Each...Next adalah struktur perulangan yang digunakan untuk mengakses setiap objek dalam sebuah koleksi (Collection) atau elemen dalam sebuah array.

Sintaks dasarnya adalah:

For Each Item In Collection

    'Kode yang dijalankan

Next Item

Pada setiap iterasi, variabel Item akan berisi objek berikutnya dalam koleksi hingga seluruh objek selesai diproses.


Kapan Sebaiknya Menggunakan For Each?

Gunakan For Each...Next ketika Anda bekerja dengan:

  • seluruh sel dalam sebuah range;

  • semua worksheet dalam workbook;

  • semua workbook yang sedang terbuka;

  • seluruh chart;

  • seluruh shape;

  • koleksi objek VBA lainnya.

Jika jumlah objek tidak diketahui atau dapat berubah, For Each...Next biasanya menjadi pilihan yang lebih tepat dibandingkan For...Next.


Contoh 1 — Menelusuri Sel dalam Range

Misalkan Anda ingin menampilkan isi setiap sel pada range A1:A5.

Sub ContohRange()

    Dim Sel As Range

    For Each Sel In Range("A1:A5")

        Debug.Print Sel.Value

    Next Sel

End Sub

Perulangan akan membaca setiap sel secara berurutan mulai dari A1 hingga A5.


Contoh 2 — Memberi Warna pada Sel

Anda juga dapat memformat seluruh sel dalam sebuah range.

Sub WarnaSel()

    Dim Sel As Range

    For Each Sel In Range("B2:B20")

        Sel.Interior.Color = vbYellow

    Next Sel

End Sub

Semua sel pada range tersebut akan diberi warna kuning.


Contoh 3 — Menelusuri Worksheet

For Each...Next sangat sering digunakan untuk memproses seluruh worksheet.

Sub DaftarWorksheet()

    Dim WS As Worksheet

    For Each WS In Worksheets

        Debug.Print WS.Name

    Next WS

End Sub

Kode tersebut menampilkan nama setiap worksheet pada Immediate Window.


Contoh 4 — Menyimpan Semua Workbook

Jika terdapat beberapa workbook yang sedang terbuka, Anda dapat menyimpannya sekaligus.

Sub SimpanWorkbook()

    Dim WB As Workbook

    For Each WB In Workbooks

        WB.Save

    Next WB

End Sub

Contoh 5 — Menampilkan Nama Shape

Misalkan sebuah worksheet memiliki beberapa bentuk (Shape).

Sub DaftarShape()

    Dim Obj As Shape

    For Each Obj In ActiveSheet.Shapes

        Debug.Print Obj.Name

    Next Obj

End Sub

Teknik ini sering digunakan ketika membuat dashboard interaktif.


For Each pada Array

Selain koleksi objek, For Each...Next juga dapat digunakan pada array.

Sub ContohArray()

    Dim Kota
    Dim Item

    Kota = Array("Jakarta", "Bandung", "Surabaya")

    For Each Item In Kota

        Debug.Print Item

    Next Item

End Sub

Seluruh elemen array akan dibaca satu per satu.


For Each vs For...Next

For Each...NextFor...Next
Tidak memerlukan indeks Menggunakan variabel indeks
Cocok untuk objek dan koleksi Cocok untuk perulangan berdasarkan angka
Kode lebih ringkas Lebih fleksibel ketika membutuhkan nomor indeks
Tidak perlu mengetahui jumlah objek Jumlah iterasi biasanya sudah diketahui

Keduanya sama-sama penting. Pilihlah struktur yang paling sesuai dengan kebutuhan program.


Studi Kasus

Sebuah laporan penjualan memiliki beberapa sel kosong pada kolom C. Anda ingin memberi warna merah pada seluruh sel yang kosong.

Sub TandaiSelKosong()

    Dim Sel As Range

    For Each Sel In Range("C2:C100")

        If Sel.Value = "" Then

            Sel.Interior.Color = vbRed

        End If

    Next Sel

End Sub

Makro akan memeriksa setiap sel secara otomatis tanpa memerlukan variabel indeks.


Kesalahan yang Sering Dilakukan

Variabel Tidak Bertipe Objek

Salah:

Dim Sel As String

Benar:

Dim Sel As Range

Variabel yang digunakan harus sesuai dengan jenis objek yang sedang diproses.


Mengubah Koleksi Saat Sedang Diulang

Hindari menambahkan atau menghapus objek dari koleksi yang sedang diproses karena dapat menyebabkan hasil yang tidak sesuai atau error.


Menggunakan For Each Saat Membutuhkan Indeks

Jika Anda memerlukan nomor urut setiap iterasi, For...Next biasanya lebih sesuai.


Tips Praktis

💡 Gunakan For Each...Next untuk membaca seluruh objek dalam koleksi.

💡 Gunakan nama variabel yang sesuai, misalnya Sel, WS, WB, atau Obj, agar kode lebih mudah dipahami.

💡 Padukan dengan If...Then untuk memproses hanya objek yang memenuhi kondisi tertentu.

💡 Hindari penggunaan Select atau Activate di dalam perulangan jika tidak benar-benar diperlukan.

💡 Pilih For...Next apabila Anda membutuhkan nilai indeks selama proses perulangan.


Ringkasan

StrukturKegunaan
For Each...Next Mengulang setiap objek dalam koleksi
Range Mengakses setiap sel
Worksheets Mengakses setiap worksheet
Workbooks Mengakses setiap workbook
Shapes Mengakses setiap shape
Array Mengakses setiap elemen array

Kesimpulan

For Each...Next merupakan salah satu struktur perulangan yang paling sering digunakan dalam VBA Excel karena mampu memproses setiap objek dalam sebuah koleksi secara otomatis. Dibandingkan For...Next, sintaksnya lebih ringkas dan mudah dibaca ketika jumlah objek tidak diketahui sejak awal. Dengan memahami kapan harus menggunakan masing-masing jenis perulangan, Anda dapat menulis kode yang lebih efisien, bersih, dan mudah dipelihara.

Hubungi Kami

Kantor Berkreasi
Alamat :
Pens Sky Venture - Sukolilo Surabaya
Karangrejo Tmur 17 Surabaya

Email : kantor.berkreasi@gmail.com
WA : wa.me/6287761589881  
(Support  Mbak Ana)

Tim Pengembang

Dr. Rojabi Azharghany, M.Si, S.Sos
Dr. H. Agus Sulthoni Imami, S.Psi. M.Pd.I.
Ali Ishaq, M.Pd.
Didik Rahwiniyanto, S.Si., M.Pd.
Mujiburrohman, M.Pd.
Mohammad Zikky, S.ST, M.T
Amien sawedi, S.Pd.
Didik P Wicaksono, M.Pd.