Vòng lặp trong VBA

Có những tình huống khi một chương trình VBA được yêu cầu thực hiện cùng một tập hợp các hành động nhiều lần liên tiếp (nghĩa là lặp lại cùng một khối mã nhiều lần). Điều này có thể được thực hiện bằng cách sử dụng các vòng lặp VBA.

Các vòng lặp VBA bao gồm:

Tiếp theo, chúng ta sẽ xem xét kỹ hơn từng chu kỳ này.

Đối với toán tử vòng lặp trong Visual Basic

Cấu trúc của toán tử vòng lặp Sản phẩm trong Visual Basic có thể được tổ chức theo một trong hai dạng: như một vòng lặp Cho tiếp theo hoặc như một vòng lặp Cho mỗi.

Chu kỳ “Cho… Tiếp theo”

chu kỳ Cho tiếp theo sử dụng một biến tuần tự nhận các giá trị từ một phạm vi nhất định. Với mỗi lần thay đổi giá trị của biến, các hành động kèm theo trong phần thân của chu trình được thực hiện. Điều này rất dễ hiểu từ một ví dụ đơn giản:

For i = 1 to 10 Total = Total + iArray (i) Next i

Trong vòng lặp đơn giản này Cho tiếp theo biến được sử dụng i, tuần tự nhận các giá trị 1, 2, 3,… 10 và đối với mỗi giá trị này, mã VBA bên trong vòng lặp được thực thi. Do đó, vòng lặp này tính tổng các phần tử của mảng. iArray trong biến Tổng số: .

Trong ví dụ trên, số gia vòng lặp không được chỉ định, vì vậy để tăng giá trị biến i từ 1 đến 10, mặc định là gia số 1… Tuy nhiên, trong một số trường hợp, cần sử dụng các giá trị gia tăng khác nhau cho vòng lặp. Điều này có thể được thực hiện bằng cách sử dụng từ khóa Bướcnhư thể hiện trong ví dụ đơn giản sau đây.

Đối với d = 0 Đến 10 Bước 0.1 d Tổng = d Tổng + d Tiếp theo d

Vì trong ví dụ trên, bước tăng dần được đặt bằng 0.1, sau đó là biến dTổng cho mỗi lần lặp lại của chu kỳ nhận các giá trị 0.0, 0.1, 0.2, 0.3,… 9.9, 10.0.

Để xác định bước lặp trong VBA, bạn có thể sử dụng một giá trị âm, chẳng hạn như sau:

For i = 10 To 1 Step -1 iArray (i) = i Tiếp theo tôi

Đây là gia số -1, vì vậy biến i với mỗi lần lặp lại chu kỳ sẽ nhận các giá trị 10, 9, 8,… 1.

Vòng lặp “Cho từng”

chu kỳ Cho mỗi tương tự như một chu kỳ Cho tiếp theo, nhưng thay vì lặp lại chuỗi giá trị cho biến đếm, vòng lặp Cho mỗi thực hiện một tập hợp các hành động cho từng đối tượng trong nhóm đối tượng được chỉ định. Trong ví dụ sau, sử dụng vòng lặp Cho mỗi liệt kê tất cả các trang tính trong sổ làm việc Excel hiện tại:

Dim wSheet dưới dạng Worksheet cho mỗi wSheet trong Worksheets MsgBox "Найден лист:" & wSheet.Name Next wSheet

Câu lệnh ngắt vòng lặp “Exit For”

Nhà điều hành Thoát cho dùng để ngắt chu trình. Ngay sau khi câu lệnh này gặp phải trong đoạn mã, chương trình sẽ kết thúc việc thực thi vòng lặp và tiếp tục thực hiện các câu lệnh có trong đoạn mã ngay sau vòng lặp này. Ví dụ, điều này có thể được sử dụng để tìm kiếm một giá trị cụ thể trong một mảng. Để làm điều này, sử dụng một vòng lặp, mỗi phần tử của mảng được quét. Ngay sau khi phần tử được yêu cầu được tìm thấy, không cần phải xem qua phần còn lại - chu trình bị gián đoạn.

Ứng dụng nhà điều hành Thoát cho được chứng minh trong ví dụ sau. Ở đây, vòng lặp lặp lại hơn 100 mục nhập mảng và so sánh từng mục với giá trị của biến dVal… Nếu tìm thấy một kết quả phù hợp, thì vòng lặp sẽ kết thúc:

For i = 1 to 100 If dValues ​​(i) = dVal then IndexVal = i Exit For End Nếu Tiếp theo i

Vòng lặp Do While trong Visual Basic

chu kỳ Làm trong khi thực thi một khối mã miễn là điều kiện được chỉ định được đáp ứng. Sau đây là một ví dụ về thủ tục Sub, trong đó sử dụng vòng lặp Làm trong khi Các số Fibonacci không vượt quá 1000 được hiển thị tuần tự:

'Thủ tục con xuất ra các số Fibonacci không vượt quá 1000 Sub Fibonacci() Dim i As Integer ' bộ đếm cho biết vị trí của phần tử trong dãy Dim iFib As Integer ' lưu giá trị hiện tại của dãy Dim iFib_Next As Integer ' lưu giá trị tiếp theo của dãy Dim iStep As Integer 'lưu trữ kích thước của số gia tiếp theo' khởi tạo biến i và iFib_Next i = 1 iFib_Next = 0 'Vòng lặp Do While sẽ thực thi cho đến khi giá trị của 'số Fibonacci hiện tại lớn hơn 1000 Do While iFib_Next < 1000 If i = 1 Then 'trường hợp đặc biệt cho phần tử đầu tiên iStep = 1 iFib = 0 Else 'lưu kích thước của số gia tiếp theo trước khi ghi đè' giá trị hiện tại của dãy iStep = iFib iFib = iFib_Next End If 'in ra số Fibonacci hiện tại trong cột A của bảng tính đang hoạt động 'trong hàng có chỉ số i Cells(i , 1).Value = iFib 'tính toán số Fibonacci tiếp theo và tăng chỉ số vị trí phần tử lên 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

Trong ví dụ đã cho, điều kiện iFib_Next < 1000 được kiểm tra ở đầu vòng lặp. Do đó, nếu giá trị đầu tiên iFib_Tiếp theo Nếu có nhiều hơn 1000, thì vòng lặp sẽ không bao giờ được thực hiện.

Một cách khác để thực hiện một vòng lặp Làm trong khi - đặt điều kiện không phải ở đầu, mà ở cuối vòng lặp. Trong trường hợp này, vòng lặp sẽ được thực hiện ít nhất một lần, bất kể điều kiện có được đáp ứng hay không.

Về mặt sơ đồ, một chu kỳ như vậy Làm trong khi với điều kiện được kiểm tra ở cuối sẽ như thế này:

Làm ... Vòng lặp Trong khi iFib_Next < 1000

Цикл «Làm cho đến» в Visual Basic

chu kỳ Làm cho đến khi rất giống với chu kỳ Làm trong khi: khối mã trong phần thân của vòng lặp được thực thi lặp đi lặp lại cho đến khi đáp ứng được điều kiện đã chỉ định (kết quả của biểu thức điều kiện là Thật). Trong thủ tục tiếp theo Sub sử dụng một chu kỳ Làm cho đến khi lấy các giá trị từ tất cả các ô trong một cột A trang tính cho đến khi cột gặp một ô trống:

iRow = 1 Do Until IsEmpty (Cells (iRow, 1)) 'Giá trị của ô hiện tại được lưu trữ trong mảng dCellValues ​​dCellValues ​​(iRow) = Cells (iRow, 1) .Value iRow = iRow + 1 Loop

Trong ví dụ trên, điều kiện IsEmpty (Ô (iRow, 1)) nằm ở đầu cấu trúc Làm cho đến khi, vì vậy vòng lặp sẽ được thực hiện ít nhất một lần nếu ô đầu tiên được lấy không trống.

Tuy nhiên, như được hiển thị trong các ví dụ về vòng lặp Làm trong khi, trong một số tình huống, vòng lặp cần được thực hiện ít nhất một lần, bất kể kết quả ban đầu của biểu thức điều kiện. Trong trường hợp này, biểu thức điều kiện nên được đặt ở cuối vòng lặp, như sau:

Do ... Loop Until IsEmpty (Cells (iRow, 1))

Bình luận