Cách sử dụng các vòng lặp tiếp theo trong Excel 2016 VBA

0
5

Loại vòng lặp đơn giản nhất trong lập trình VBA của Excel là vòng lặp For-Next. Vòng lặp được điều khiển bởi một biến đếm, bắt đầu ở một giá trị và dừng ở một giá trị khác. Các câu lệnh giữa câu lệnh For và câu lệnh tiếp theo là các câu lệnh được lặp lại trong vòng lặp.

Một ví dụ cho tiếp theo

Ví dụ sau sử dụng vòng lặp For-Next để tổng 1.000 số dương đầu tiên. Biến Tổng bắt đầu bằng không. Sau đó, các vòng lặp xảy ra. Biến Cnt là bộ đếm vòng lặp. Nó bắt đầu là 1 và được tăng thêm 1 mỗi lần qua vòng lặp. Vòng lặp kết thúc khi Cnt là 1.000.

Ví dụ này chỉ có một câu lệnh bên trong vòng lặp. Câu lệnh này thêm giá trị của Cnt vào biến Tổng. Khi vòng lặp kết thúc, MsgBox sẽ hiển thị tổng của các số.

Sub AddNumbers()
Dim Total As Double
Dim Cnt As Long
Total = 0
For Cnt = 1 To 1000
Total = Total + Cnt
Next Cnt
MsgBox Total
End Sub

Ví dụ cho các bước tiếp theo với một bước

Bạn có thể sử dụng giá trị Bước để bỏ qua một số giá trị bộ đếm trong vòng lặp For-Next. Đây là ví dụ trước, viết lại để chỉ tổng các số lẻ trong khoảng từ 1 đến 1.000:

Sub AddOddNumbers()
Dim Total As Double
Dim Cnt As Long
Total = 0
For Cnt = 1 To 1000 Step 2
Total = Total + Cnt
Next Cnt
MsgBox Total
End Sub

Lần này, Cnt bắt đầu là 1 và sau đó nhận các giá trị 3, 5, 7, v.v. Giá trị Bước xác định cách tăng bộ đếm. Lưu ý rằng giá trị vòng lặp trên (1000) không thực sự được sử dụng vì giá trị cao nhất của Cnt sẽ là 999.

Dưới đây là một ví dụ khác sử dụng giá trị Bước là 3. Quy trình này hoạt động với bảng hoạt động và áp dụng màu xám nhạt cho mỗi hàng thứ ba, từ hàng 1 đến hàng 100.

Sub ShadeEveryThirdRow()
Dim i As Long
For i = 1 To 100 Step 3
Rows(i).Interior.Color = RGB(200, 200, 200)
Next i
End Sub

Kiểm tra kết quả của việc chạy macro này.

Một ví dụ For-Next với câu lệnh Exit For

Vòng lặp For-Next cũng có thể bao gồm một hoặc nhiều Thoát cho các câu lệnh trong vòng lặp. Khi VBA gặp câu lệnh này, vòng lặp chấm dứt ngay lập tức.

Ví dụ sau đây cho thấy câu lệnh Thoát. Thường trình này là một thủ tục Hàm, dự định sẽ được sử dụng trong một công thức bảng tính. Hàm chấp nhận một đối số (một biến có tên Str) và trả về các ký tự ở bên trái của chữ số đầu tiên. Ví dụ: nếu đối số là KB KBR98Z, thì hàm này trả về KB KB.

Function TextPart(Str)
Dim i As Long
TextPart = ““
For i = 1 To Len(Str)
If IsNumeric(Mid(Str, i, 1)) Then
Exit For
Else
TextPart = TextPart & Mid(Str, i, 1)
End If
Next i
End Function

Vòng lặp For-Next bắt đầu bằng 1 và kết thúc bằng số đại diện cho số lượng ký tự trong chuỗi. Mã sử ​​dụng hàm Mid của VBA để trích xuất một ký tự trong vòng lặp. Nếu tìm thấy một ký tự số, câu lệnh Thoát cho được thực thi và vòng lặp kết thúc sớm.

Nếu ký tự không phải là số, nó được gắn vào giá trị được trả về (giống với tên của hàm). Lần duy nhất vòng lặp sẽ kiểm tra mọi ký tự là nếu chuỗi được truyền dưới dạng đối số không chứa ký tự số.

Một ví dụ lồng nhau cho tiếp theo

Bạn có thể có bất kỳ số lượng câu lệnh nào trong vòng lặp và lồng các vòng lặp For-Next bên trong các vòng lặp For-Next khác.

Ví dụ sau sử dụng vòng lặp For-Next lồng nhau để chèn các số ngẫu nhiên vào một phạm vi ô gồm 12 hàng-by-5 ​​cột. Lưu ý rằng thường trình thực hiện vòng lặp bên trong (vòng lặp với bộ đếm Row) một lần cho mỗi lần lặp của vòng lặp bên ngoài (vòng lặp với bộ đếm Col). Nói cách khác, thường trình thực thi các câu lệnh Cells (Row, Col) = Rnd 60 lần.

Sub FillRange()
Dim Col As Long
Dim Row As Long
For Col = 1 To 5
For Row = 1 To 12
Cells(Row, Col) = Rnd
Next Row
Next Col
End Sub

Ví dụ tiếp theo sử dụng các vòng lặp For-Next lồng nhau để khởi tạo một mảng ba chiều với giá trị 100. Thường trình này thực thi câu lệnh ở giữa tất cả các vòng lặp (câu lệnh gán) 1.000 lần (10 * 10 * 10), mỗi lần với sự kết hợp các giá trị khác nhau cho i, j và k:

Sub NestedLoops()
Dim MyArray(10, 10, 10)
Dim i As Long
Dim j As Long
Dim k As Long
For i = 1 To 10
For j = 1 To 10
For k = 1 To 10
MyArray(i, j, k) = 100
Next k
Next j
Next i
‘ Other statements go here
End Sub

Đây là một ví dụ cuối cùng sử dụng các vòng lặp For-Next lồng nhau, với giá trị Bước. Quy trình này tạo ra một bàn cờ bằng cách thay đổi màu nền của các ô xen kẽ.

Bộ đếm hàng vòng lặp từ 1 đến 8. Cấu trúc If-Then xác định cấu trúc For-Next lồng nhau sẽ sử dụng. Đối với các hàng được đánh số lẻ, bộ đếm Col bắt đầu bằng 2. Đối với các hàng được đánh số chẵn, bộ đếm Col bắt đầu bằng 1. Cả hai vòng đều sử dụng giá trị Bước là 2, do đó các ô thay thế bị ảnh hưởng. Hai câu lệnh bổ sung làm cho các ô vuông (giống như một bàn cờ thực).

Sub MakeCheckerboard()
Dim R As Long, C As Long
For R = 1 To 8
If WorksheetFunction.IsOdd(R) Then
For C = 2 To 8 Step 2
Cells(R, C).Interior.Color = 255
Next C
Else
For C = 1 To 8 Step 2
Cells(R, C).Interior.Color = 255
Next C
End If
Next R
Rows(“1:8”).RowHeight = 35
Columns(“A:H”).ColumnWidth = 6.5
End Sub

Xem thêm: Cách xử lý lỗi trong VBA Excel 2016

Khóa học VBA Excel tại Hà Nội

LEAVE A REPLY

Please enter your comment!
Please enter your name here