Langsung ke konten utama

VBA Loop (For & For Each)


Post ini akan membahas pemrograman visual basic yang bersifat pengulangan atau repetitive (Looping). pada contoh sebelumnya kita membuat pemrograman untuk memutuskan apakah seorang siswa dapat dinyatakan "Lulus" atau "Gagal".

Jika dalam satu kelas terdapat 60 siswa, tentu akan sulit bagi kita memuat command sebanyak 60 kali pada jendela visual basic editor. Selain itu coding yang kita buat akan menjadi terlalu panjang.

Jika kita ingin melakukan automasi pengambilan keputusan kepada 60 siswa, kita tidak perlu membuat coding yang terlalu panjang sampai 60 kali. Visual basic membuat fungsi Loop untuk melakukan tugas yang bersifat pengulangan. Yang perlu kita lakukan hanya menambahkan sisipan statement dan struktur nya. Pada post kali ini kita akan menggunakan fungsi Loop menggunakan statement:

  1. For Each - Next
  2. For - Next.  


Berbeda dengan Post atau site blog visual lainnya, saya akan memulai contoh pengulangan dari For Each - Next terlebih dahulu, kemudian melanjutkan ke contoh ke-2 yaitu For - Next.

Sebelum itu, kita akan memahami dulu struktur dan pasangan (awalan & akhiran) dari setiap level statement sbb:

Awalan Akhiran
Sub End Sub
If End If
For Next




Loop "For Each"

Berikut adalah contoh pemrograman visual basic  menggunakan Looping "For Each- Next". yang akan kita sisipkan pada command dari post sebelumnya



Command diatas dapat kita lihat dalam bentuk persamaan composite sbb:

 F. (Command) = F. Sub  { For Each  If  Else ] } ) 


Dari persamaan diatas kita dapat melihat letak posisi sisipan untuk statement "For Each". Staement "For Each" berada satu level diatas Statement If-Else. Itu artinya kita akan menggunakan fungsi pengulangan (Loop - For Each), terhadap fungsi logika "If Else" yang digunakan untuk memutuskan "Lulus" atau "Gagal" nya siswa.

Semenjak kasus jumlah siswa bertambah dari 1 siswa menjadi 60 siswa, dengan demikian kita tidak lagi memanggil cell "tunggal", melainkan kumpulan cell atau "Range". Range tersebut berawal dari cell A1 sampai cell A60 (menunjukan 60 siswa yang harus kita evaluasi) 

Pada tahap awal visual basic akan menjalankan automasi pertama nya untuk siswa pertama dimana nilainya tercantum pada cell A1. Jika proses tersebut telah selesai, visual basic akan melanjutkan ke proses berikutnya yaitu siswa ke dua dimana nilainya tercantum pada cell A2, dan begitu seterusnya sampai kepada cell terakhir atau cell A60. 


Pertanyaannya adalah: 
  • Apakah visual basic tidak akan kelebihan dalam mengevaluasi sampai cell A61 ? 
  • Kenapa visual basic mampu melakukan pengulangan sebanyak 60 kali (tidak lebih, tidak kurang) padahal command atau visual basic editor kita tidak mencantumkan kata atau code: "60 kali" ?

Jawabannya adalah karena kita menggunakan statemen "For Each", dan bukannya statement "For". Statement "For Each" merupakan metode pengulangan pada visual basic yang menggunakan satuan ukuran "object atau collection".
Sementara "For" menggunakan satuan ukuran "set angka atau rangkaian angka".


Command yang telah kita buat menargetkan "cell" sebagai object kita. dan disaat yang bersamaan kita juga sudah menyebutkan "range" yang akan kita gunakan (A1:A60)    




Command "Cell In Range" seperti gambar command diatas merupakan informasi yang cukup bagi visual basic untuk melaksanakan eksekusi pengulangan sebanyak 60 kali, sesuai dengan keinginan user. Ketika "range" yang dipilih berawal dari A1 sampai  A60, dan kita memilih "cell" sebagai satuan object tunggal (integer), maka visual basic akan mengerti atau memahami bahwa proses eksekusi terhadap pengulangan harus dilakukan sebanyak 60 kali.

"For Each" tersebut menggunakan "Cell" dan "Range" sebagai target atau object collection nya.



Loop "For"

Pada contoh "For Each sebelumnya kita mendapatkan command sebagai berikut:

 


Jika kita mengganti statement "For Each" menjadi "For" maka command tersebut akan berubah menjadi command seperti dibawah ini : 





Dari perubahan tersebut kita dapat melihat bahwa pada command baru (For) tidak lagi menggunakan "Cell" dan "Range" sebagai target satuan ukuran nya. command baru (For) sekarang menggunakan  "rangkaian angka" sebagai targetnya.

Namun rangkaian angka tersebut tidak akan mampu dipahami oleh visual basic, jika kita tidak menentukan atau menciptakan "variable" nya terlebih dahulu. Sehingga command diatas menciptakan sebuah variable bernama "K" terlebih dahulu pada bagian awal. Command.
Variable "K" tersebut kemudian disisipkan untuk menjadi satuan ukuran yang baru di dalam fungsi logika "If Else". 


Command baru diatas dapat sekarang memiliki persamaan composite sbb:

 F. (Command) = F. { Sub  For - K If  Else ) ] } 



Catatan yang harus kita ingat disini adalah bahwa "variable K" bukanlah cell maupun range.
"variable K" adalah sebuah rangkaian angka yang belum ditentukan besar jumlah nya. Melainkan hanya sebagai variable bertipe "long" (As Long).


Besar jumlah rangkaian angka dari "variable K", baru akan ditentukan saat command mulai memanggil variable tersebut pada level - fungsi pengulangan atau Loop - "For" pada baris ke-4 command.


Supaya nanti dapat digunakan pada level fungsi logika  -"If Else".




For vs For-Each

Ketahanan (resistance)

Jika dilihat dari panjang pendeknya coding atau command, tentu kita akan lebih menyukai command menggunakan loop For-Each. Namun kenyataanya menggunakan Loop For akan jauh lebih baik dari pada Loop For-Each, jika dilihat dari sisi ketahanan (resistance) terhadap perubahan external. Jika ternyata terjadi perubahan pada populasi data dalam hal ini jumlah siswa. tentu akan lebih sulit dan lama mengganti statement For-Each dari pada statement For. Sebagai contoh: jika terjadi perubahan jumlah siswa dari 60 menjadi 80 siswa, user harus kembali memastikan range cell yang baru: misal disini adalah cell A80. Hal ini lebih berpotensi mengakibatkan terjadinya kesalahan oleh user

Berbeda jika anda menggunakan "variable K" yang sudah ditentukan sebelumnya pada statement pengulangan For. anda hanya perlu mengganti jumlah "variable K" dari 60 menjadi 80.


Ini akan sangat berpengaruh besar jika kita berhadapan tidak dengan hanya satu command melainkan banyak command dengan coding yang sangat panjang. Jika user menggunakan "For Each", user harus mengganti setiap kata "A60" menjadi "A80". Namun jika user sudah menciptakan "variable K" sebelumnya (untuk loop For), anda hanya perlu mengganti panjang range dari "K". Dengan demikian keakuratan hasil akan jauh lebih baik atau mengurangi kesalahan (eror) proses coding oleh user.



Memory

Namun demikian kita harus mengingat bahwa loop For harus membuat sebuah "variable K"  terlebih dahulu. Kita telah membahas pada post sebelumnya tentang Variable VBA (Dim). Bahwa membuat sebuah variable membutuhkan memori dan lokasi penyimpanan yang dapat berisi data agar dapat di modifikasi selama eksekusi pemrograman. Sehingga menggunakan loop For akan lebih berat dan lama terutama jika menggunakan data base yang cukup besar.

Dari sini kita dapat memilih apakah kita ingin menggunakan loop For "dengan keakuratan hasil atau pengurangan potensi kesalahan" atau menggunakan loop For Each untuk kecepatan waktu automasi.


For For Each
Butuh Variable Tidak
Resistance Tidak
Tidak Cepat

Komentar