Pembahasan FOR NEXT - Sebenarnya saya ragu untuk menulis pembahasan FOR NEXT dalam postingan, sebagai realisasi keraguan saya adalah terdapatnya pembahasan prosedur yang saya etakan dihalaman statis bukan area postingan, kemudian saya meninggalkan keraguan saya ini dan menulis ulasan tentang FOR NEXT kedalam area postingan, saya hanya berharap ulasan ini bisa diterima dan dapat dipahami oleh pembaca


FOR NEXT atau pengulangan kegiatan sering dilakukan dalam pemrograman, mengulang ulang suatu proses biasanya dilakukan untuk menghasilakn suatu data yang berurutan, misalnya untuk membuat nomor urut, untuk membuat tanggal, bulan , tahun atau membuka seluruh workbook laporan penjualan setiap cabang yang ada dalam sebuah folder secara silih berganti lalu membaca data didalamnya dan menyalinnya ke sebuah workbook yang menampung seluruh data laporan penjualan.

Sepengetahuan saya ada 5 (lima) macam perulangan dalam Visual Basic aupun VBA, pengulangan tersebut adalah :

FOR ... NEXT
FOR EACH ... NEXT
DO WHILE/UNTIL ... LOOP
DO ... LOOP WHILE/UNTIL
WHILE ... WEND

Sebagaimana judul postingan kali ini saya hanya akan membahas tuntas sistem pengulangan menggunakan FOR NEXT, pembahsan FOR NEXT ini saya ambil dari tulisan MR KID, karena anda pasti sudah mengetahui basat kemampuan saya tidak mungkin bisa menulis sedetail ini, oh ya untuk contoh FOR NEXT pada kesempatan yang lalu saya telah memberikan cara membuat nomor urut dengan VBA silahkan lihat postinganya disini

Bentuk Dasar FOR NEXT

Perulangan dengan FOR ... NEXT digunakan untuk memproses sesuatu dari suatu nilai awal sampai nilai akhir dengan interval lompatan tertentu. Contohnya adalah memberi nomor urut suatu output tertentu yang dimulai dari nomor urut 1 sampai sekian dengan interval lompatan angka nomor urut adalah 1. Interval lompatan juga bisa digunakan untuk menentukan posisi suatu data. Contohnya adalah membaca atau menulis data disetiap kelipatan 5 baris, artinya mulai baris 2 lalu 7,12,dst. Hal ini berarti juga bisa digunakan untuk membaca atau menulis data untuk setiap blok data yang terdiri dari sekian kolom. Misalnya, sebuah data output dengan kolom-kolom yang berupa series data per bulan per cabang. Jika ada 7 cabang, maka cabang pertama selalu 7 kolom setelah posisi terakhir ditemukannya cabang pertama tersebut.

Secara umum, bentuk dasar FOR ... NEXT adalah :

FOR variabel_loop = nilai_awal TO nilai_akhir [STEP nilai_interval]
'baris-baris kode untuk suatu proses yang harus di-loop
NEXT [variabel_loop]

Keterangan bentuk dasar FOR ... NEXT :
variabel_loop : nama dari variabel yang ber-datatype bilangan bulat seperti Integer atau Long
nilai_awal : nilai bilangan bulat yang menjadi titik mulai proses. Bisa menggunakan variabel.
nilai_akhir : nilai bilangan bulat yang menjadi titik akhir proses. Bisa menggunakan variabel.
[STEP nilai_interval] : informasi tentang lompatan nilai variabel_loop untuk masuk ke proses selanjutnya.
nilai_interval : nilai bilangan bulat yang menjadi interval lompatan bagian [STEP]. Default-nya adalah 1. Jika berisi nilai negatif, maka variabel_loop yang baru akan lebih kecil dari variabel_loop yang lama. Bagian ini tidak boleh bernilai 0, karena akan membuat blok FOR ... NEXT diproses terus menerus tanpa henti.
NEXT [variabel_loop] : akhir blok FOR tersebut. Bagian [variabel_loop] boleh tidak ditulis. Meskipun demikian, sebaiknya tetap ditulis agar memudahkan pembacaan baris-baris kode dikemudian hari.

Contoh Penggunaan bentuk dasar FOR ... NEXT

Buka microsoft excel anda, buat workbook baru, buat worksheet dengan nama 'Databaseq' kemudian masuk kejendela VBE dengan menekan ALT+F11, buat modul baru.

Contoh pertama : FOR ... NEXT nilai yang bertambah
Akan membuat nomor urut dari nomor 1 sampai nomor 10 dengan interval nomor urut adalah 1. Ditulis mulai A2 di sheet bernama 'Databaseq'. Bunyi prosedur untuk kebutuhan seperti Contoh pertama ini adalah :
Public Sub ForNext_Contoh1()
Dim 1_Urut As Long

For 1_Urut = 1 To 10 Step 1
Sheets("Databaseq").Range("A" & 1_Urut + 1).Value = 1_Urut
Next 1_Urut
End Sub

Proses akan diawali dengan mendeklarasikan variabel loop bernama 1_Urut yang ber-datatype Long (menampung bilangan bulat).
Pada baris berbunyi :
For 1_Urut = 1 To 10 Step 1
Variabel 1_Urut akan diisi dengan nilai 1 sebagai nilai awal proses loop.
Komputer akan menyimpan batas akhir berupa nilai 10.
Komputer juga akan menyimpan bahwa interval dari 1_Urut yang satu ke 1_Urut berikutnya adalah +1
Pada baris berbunyi :
Sheets("Databaseq").Range("A" & 1_Urut + 1).Value = 1_Urut
nilai dalam variabel 1_Urut (bagian = 1_Urut) akan ditulis kesebuah cell dengan alamat di kolom A baris 1_Urut + 1. Karena 1_Urut bernilai 1, maka 1_Urut + 1 akan bernilai 2, yang artinya akan merujuk ke cell dengan alamat A2 di sheet bernama 'Databaseq'.
Pada baris berbunyi :
Next 1_Urut
nilai 1_Urut yang lama, yaitu 1, akan ditambahkan oleh komputer dengan nilai interval yang sudah disimpannya, yaitu +1, sehingga variabel 1_Urut akan memiliki nilai yang baru, yaitu 1 (nilai yang lama) ditambah +1 (nilai interval) yang menghasilkan nilai 2.
Proses berikutnya adalah langsung ke baris berbunyi :
Sheets("Databaseq").Range("A" & 1_Urut + 1).Value = 1_Urut
dengan membawa 1_Urut berisi nilai yang baru, yaitu 2, sehingga lokasi penulisan 1_Urut berikutnya ada di sheet Dataku cell A3.
Proses akan terus seperti itu sampai suatu saat nanti, 1_Urut yang baru (saat memproses Next 1_Urut) akan menghasilkan nilai yang lebih dari nilai akhir yang disimpan komputer, yaitu 6. Jadi, saat 1_Urut bernilai 7, maka proses loop selesai dan berpindah ke baris kode berikutnya, alias tidak kembali ke baris penulisan nomor lagi.
Jadi, baris-baris kode dalam blok FOR ... NEXT di atas akan diproses sebanyak 6 kali, yaitu dari 1_Urut bernilai 1 sampai dengan 1_Urut bernilai 6 karena intervalnya +1.
Sesuai penjelasan per bagian diatas, dimana bagian [STEP nilai_interval_lompatan] memiliki nilai default adalah 1, maka prosedur diatas bisa ditulis tanpa bagian Step 1 sebagai berikut :
Public Sub ForNext_Contoh1()
Dim 1_Urut As Long

For 1_Urut = 1 To 6
Sheets("Databaseq").Range("A" & 1_Urut + 1).Value = 1_Urut
Next 1_Urut
End Sub

Contoh 2 : FOR ... NEXT nilai yang bertambah dengan interval lebih dari 1
Nomor urut akan dimulai dari 1, tetapi bertambah per 3, dan ditulis di kolom C mulai baris 2. Bunyi prosedur untuk kebutuhan seperti contoh 2 ini adalah :
Public Sub ForNext_Contoh2()
Dim 1_Urut As Long, lBaris As Long

lBaris = 2
For 1_Urut = 1 To 6 Step 3
Sheets("Databaseq").Range("C" & lBaris).Value = 1_Urut
lBaris = lBaris + 1
Next 1_Urut
End Sub
Ada penambahan variabel bernama lBaris yang bertugas untuk menyimpan nomor baris Excel lokasi penulisan. Hal ini dibutuhkan karena nilai intervalnya sudah bukan +1 lagi.
Nilai lBaris diset pertama kali dengan nilai 2 karena penulisan akan dimulai pada baris 2.
Nilai lBaris harus diset dengan nilai yang baru, yaitu bertambah 1, tepat sebelum memasuki baris Next 1_Urut dengan baris kode :
lBaris = lBaris + 1
Kolom penulisan nomor urut juga disesuaikan menjadi "C", karena lokasi penulisan nomor urut akan dilakukan pada kolom C sheet 'Databaseq'
Nilai interval (setelah bunyi statement STEP) diisi dengan 3, karena penambahannya diminta per 3.
Proses yang terjadi dalam prosedur tersebut adalah :
Mendeklarasikan 1_Urut bertype Long dan lBaris bertype Long
Mengisi nilai lBaris dengan nilai 2
Memproses baris FOR yang diawali berupa mengisi 1_Urut pertama kali dengan nilai 1, kemudian menyimpan nilai akhir (6) dan nilai interval (3)
Menulis disheet bernama 'Databaseq' pada kolom C di baris yang disimpan oleh variabel lBaris saat itu
Menyimpan nilai lBaris yang baru, yaitu nilai lBaris yang lama ditambah dengan nilai 1
Menuju nilai 1_Urut berikutnya, dimana 1_Urut akan mengalami penambahan +3 akibat nilai intervalnya adalah +3
Jadi, baris-baris kode dalam blok FOR ... NEXT di atas akan diproses sebanyak 2 kali, yaitu dari 1_Urut bernilai 1 sampai dengan 1_Urut bernilai 6 karena intervalnya +3, yaitu pada 1_Urut bernilai 1 dan 4.
Pada saat 1_Urut bernilai 1, lBaris bernilai 2. Saat 1_Urut bernilai 4, lBaris bernilai 2.


Contoh 3 : FOR ... NEXT nilai yang berkurang minimal -1
Nomor urut dimulai dari 6 kemudian menurun per 3. Ditulis pada kolom E pada baris 2,3,dst. Bunyi prosedur untuk kebutuhan seperti contoh 3 ini adalah :
Public Sub ForNext_Contoh3()
Dim 1_Urut As Long, lBaris As Long

lBaris = 2
For 1_Urut = 6 To 1 Step -3
Sheets("Databaseq").Range("E" & lBaris).Value = 1_Urut
lBaris = lBaris + 1
Next 1_Urut
End Sub
Perbedaan dengan Contoh 2 adalah pada baris :
For 1_Urut = 6 To 1 Step -3
Sheets("Databaseq").Range("E" & lBaris).Value = 1_Urut
Nilai awal 1_Urut adalah 6.
Nilai akhir yang disimpan komputer adalah 1.
Nilai interval yang disimpan komputer adalah -3.
Penulisan dilakukan pada kolom E
Proses yang terjadi dalam prosedur bernama ForNext_Contoh3 adalah :
Deklarasi variabel 1_Urut bertype Long untuk nilai loop
Deklarasi variabel lBaris bertype Long untuk nilai baris penulisan
Menentukan baris pertama penulisan senilai 2 dalam baris :
lBaris = 2
Proses untuk menetapkan nilai pertama loop ke dalam 1_Urut sebesar 6, menyimpan nilai akhir senilai 1, dan menyimpan nilai interval -3, yaitu pada baris kode berbunyi :
For 1_Urut = 6 To 1 Step -3
Proses penulisan nilai pertama loop (nilai 6) ke sheet 'Databaseq' pada kolom E baris 2 (disimpan oleh lBaris saat ini), pada baris kode :
Sheets("Databaseq").Range("E" & lBaris).Value = 1_Urut
Menentukan nilai baris penulisan yang baru (lBaris yang baru), yaitu lBaris yang lama ditambah 1 yang menghasilkan nilai 3 dari 2 + 1, pada baris kode :
lBaris = lBaris + 1
Berpindah ke nilai loop kedua (1_Urut baru), yaitu nilai loop lama ditambah nilai interval yang berupa 6 + (-3) dan akan menghasilkan 1_Urut baru bernilai 3
Karena 1_Urut yang baru (bernilai 3) masih dalam rentang nilai awal (6) dan nilai akhir (1), maka proses kembali ke baris penulisan nilai loop dengan membawa nilai loop kedua yang bernilai 3
Proses penulisan nilai loop kedua (nilai 3) ke sheet 'Databaseq' pada kolom E baris 3 (disimpan oleh lBaris saat ini), pada baris kode :
Sheets("Databaseq").Range("E" & lBaris).Value = 1_Urut
Menentukan nilai baris penulisan yang baru (lBaris yang baru), yaitu lBaris yang lama ditambah 1 yang menghasilkan nilai 4 dari 3 + 1, pada baris kode :
lBaris = lBaris + 1
Berpindah ke nilai loop ketiga (1_Urut baru), yaitu nilai loop lama (3) ditambah nilai interval (-3) dan akan menghasilkan 1_Urut baru bernilai 0
Karena 1_Urut yang baru (bernilai 0) sudah diluar rentang nilai awal (6) dan nilai akhir (1), maka proses loop selesai alias keluar dari blok FOR ... NEXT untuk memproses baris kode berikutnya.
Baris kode berikutnya setelah blok FOR ... NEXT adalah akhir blok prosedur berupa END SUB, maka seluruh prosedur selesai dikerjakan.

Contoh 4 : FOR ... NEXT posisi penulisan yang bertambah dengan interval lebih dari 1
Nomor urut dari 1 yang bertambah per 1 ditulis pada setiap baris dikolom G mulai dari baris 2 sampai baris 10 per 3 baris. Jadi nomor urut 1,2,dst akan ditulis pada baris 2,5,dst. Bunyi prosedur untuk kebutuhan seperti contoh 3 ini adalah :
Public Sub ForNext_Contoh4()
Dim 1_Urut As Long, lBaris As Long

1_Urut = 1
For lBaris = 2 To 10 Step 3
Sheets("Databaseq").Range("G" & lBaris).Value = 1_Urut
1_Urut = 1_Urut + 1
Next lBaris
End Sub
Prosedur diatas mirip dengan Contoh 2. Perbedaannya adalah variabel yang digunakan dalam baris-baris kode :
1_Urut = 1
For lBaris = 2 To 10 Step 3
dan juga baris kode :
1_Urut = 1_Urut + 1
Next lBaris
Karena berbasis pada posisi penulisan yang dibatasi, maka nilai yang ditulis (1_Urut) yang ditentukan nilai awalnya (baris kode 1_Urut = 1) dan bertambah 1 melalui proses di baris kode :
1_Urut = 1_Urut + 1
Variabel lBaris yang menjadi pokok proses loop diatur penentuan nilai-nilainya menggunakan baris kode :
For lBaris = 2 To 10 Step 3
Demikianlah pembahsan FOR NEXT bagian pertama telah berakhir, kita lanjutkan pembasahn FOR NEXT pada lanjutan berikutnya, biasanya semakain banyak tulisan yang saya buat maka semakin anda tidak akan mengerti, akan tetapi untuk kali ini anda harus mengerti karena ini bukan murni tulisan saya melainkan tulisan Master excel sungguhan yaitu MR. KID yang terkenal dengan grup milsi Excelnya pada tahun 2000an, semoga tulisan ini bermanfaat dan selamat pagi
No comments