Loop di VBA

Ada situasi ketika program VBA diperlukan untuk melakukan serangkaian tindakan yang sama beberapa kali berturut-turut (yaitu, ulangi blok kode yang sama beberapa kali). Ini dapat dilakukan dengan menggunakan loop VBA.

Loop VBA meliputi:

Selanjutnya, kita akan melihat lebih dekat pada masing-masing siklus ini.

Untuk Operator Loop di Visual Basic

Struktur operator loop Grafik di Visual Basic dapat diatur dalam salah satu dari dua bentuk: sebagai loop Untuk selanjutnya atau sebagai lingkaran Untuk setiap.

Siklus “Untuk … Selanjutnya”

Sepeda Untuk selanjutnya menggunakan variabel yang secara berurutan mengambil nilai dari rentang yang diberikan. Dengan setiap perubahan nilai variabel, tindakan yang terlampir dalam tubuh siklus dilakukan. Ini mudah dimengerti dari contoh sederhana:

Untuk i = 1 Sampai 10 Total = Total + iArray(i) Selanjutnya i

Dalam lingkaran sederhana ini Untuk selanjutnya variabel digunakan i, yang secara berurutan mengambil nilai 1, 2, 3, … 10, dan untuk masing-masing nilai ini, kode VBA di dalam loop dieksekusi. Jadi, loop ini menjumlahkan elemen-elemen array. iArray dalam variabel Total.

Dalam contoh di atas, kenaikan loop tidak ditentukan, jadi untuk menaikkan variabel i dari 1 hingga 10, defaultnya adalah kenaikan 1… Namun, dalam beberapa kasus perlu menggunakan nilai kenaikan yang berbeda untuk loop. Ini dapat dilakukan dengan menggunakan kata kunci Langkahseperti yang ditunjukkan pada contoh sederhana berikut.

Untuk d = 0 Sampai 10 Langkah 0.1 dTotal = dTotal + d Selanjutnya d

Karena dalam contoh di atas, langkah kenaikan diatur sama dengan 0.1, maka variabel dTotal untuk setiap pengulangan siklus mengambil nilai 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

Untuk menentukan langkah loop di VBA, Anda bisa menggunakan nilai negatif, misalnya seperti ini:

Untuk i = 10 Ke 1 Langkah -1 iArray(i) = i Selanjutnya i

Di sini kenaikannya adalah -1, jadi variabelnya i dengan setiap pengulangan siklus mengambil nilai 10, 9, 8, … 1.

Loop "Untuk Setiap"

Sepeda Untuk setiap mirip dengan siklus Untuk selanjutnya, tetapi alih-alih mengulangi urutan nilai untuk variabel penghitung, loop Untuk setiap melakukan serangkaian tindakan untuk setiap objek dalam kelompok objek tertentu. Dalam contoh berikut, menggunakan loop Untuk setiap menghitung semua lembar dalam buku kerja Excel saat ini:

Dim wSheet As Worksheet Untuk Setiap wSheet di Worksheets MsgBox "Найден : " & wSheet.Name Next wSheet

Pernyataan interupsi loop "Keluar Untuk"

Operator Keluar Untuk digunakan untuk memutus siklus. Segera setelah pernyataan ini ditemukan dalam kode, program mengakhiri eksekusi loop dan melanjutkan ke eksekusi pernyataan yang ada dalam kode segera setelah loop ini. Ini dapat digunakan, misalnya, untuk mencari nilai tertentu dalam array. Untuk melakukan ini, menggunakan loop, setiap elemen array dipindai. Segera setelah elemen yang diperlukan ditemukan, tidak perlu melihat-lihat sisanya – siklusnya terputus.

Aplikasi operator Keluar Untuk ditunjukkan dalam contoh berikut. Di sini loop mengulangi lebih dari 100 entri array dan membandingkan masing-masing dengan nilai variabel dVal… Jika kecocokan ditemukan, maka loop dihentikan:

For i = 1 To 100 If dValues(i) = dVal Then IndexVal = i Exit For End If Next i

Perulangan Do While di Visual Basic

Sepeda lakukan sambil mengeksekusi blok kode selama kondisi yang ditentukan terpenuhi. Berikut ini adalah contoh prosedur Sub, di mana menggunakan loop lakukan sambil Angka Fibonacci tidak melebihi 1000 ditampilkan secara berurutan:

'Sub prosedur menghasilkan angka Fibonacci tidak melebihi 1000 Sub Fibonacci() Dim i As Integer 'counter untuk menunjukkan posisi elemen dalam urutan Dim iFib As Integer 'menyimpan nilai saat ini dari urutan Dim iFib_Next As Integer 'menyimpan nilai berikutnya dari urutan Dim iStep As Integer 'menyimpan ukuran kenaikan berikutnya' menginisialisasi variabel i dan iFib_Next i = 1 iFib_Next = 0 'Do While loop akan mengeksekusi hingga nilai 'bilangan Fibonacci saat ini lebih besar dari 1000 Do While iFib_Next < 1000 If i = 1 Kemudian 'kasus khusus untuk elemen pertama iStep = 1 iFib = 0 Else' simpan ukuran kenaikan berikutnya sebelum menimpa 'nilai saat ini dari urutan iStep = iFib iFib = iFib_Next End If 'cetak angka Fibonacci saat ini di kolom A dari lembar kerja aktif 'pada baris dengan indeks i Cells(i , 1).Value = iFib 'menghitung angka Fibonacci berikutnya dan menaikkan indeks posisi elemen sebesar 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

Dalam contoh yang diberikan, kondisi iFib_Berikutnya < 1000 diperiksa pada awal loop. Oleh karena itu, jika nilai pertama iFib_Berikutnya Jika ada lebih dari 1000, maka loop tidak akan pernah dieksekusi.

Cara lain untuk mengimplementasikan loop lakukan sambil - tempatkan kondisi bukan di awal, tetapi di akhir loop. Dalam hal ini, loop akan dieksekusi setidaknya sekali, terlepas dari apakah kondisinya terpenuhi.

Secara skematis, siklus seperti itu lakukan sambil dengan kondisi yang akan diperiksa pada akhirnya akan terlihat seperti ini:

Lakukan ... Ulangi Saat iFib_Next < 1000

«Lakukan Sampai» Visual Basic

Sepeda Lakukan sampai sangat mirip dengan siklus lakukan sambil: blok kode dalam tubuh loop dieksekusi berulang-ulang sampai kondisi yang ditentukan terpenuhi (hasil dari ekspresi kondisional adalah Benar). Dalam prosedur selanjutnya Sub menggunakan siklus Lakukan sampai mengambil nilai dari semua sel dalam kolom A lembar kerja hingga kolom menemukan sel kosong:

iRow = 1 Lakukan Hingga IsEmpty(Cells(iRow, 1)) 'Nilai sel saat ini disimpan dalam array dCellValues ​​​​dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 Loop

Pada contoh di atas, kondisi IsEmpty(Sel(iRow, 1)) terletak di awal struktur Lakukan sampai, jadi perulangan akan dijalankan setidaknya sekali jika sel pertama yang diambil tidak kosong.

Namun, seperti yang ditunjukkan pada contoh loop lakukan sambil, dalam beberapa situasi, loop perlu dieksekusi setidaknya sekali, terlepas dari hasil awal ekspresi kondisional. Dalam hal ini, ekspresi kondisional harus ditempatkan di akhir loop, seperti ini:

Lakukan ... Loop Hingga IsEmpty(Sel(iRow, 1))

Tinggalkan Balasan