Vòng lặp VBA trong Excel
Vòng lặp là một trong những kỹ thuật lập trình mạnh mẽ nhất. Vòng lặp trong Excel VBA cho phép bạn lặp qua một loạt các ô chỉ với một vài dòng mã.
Single Loop
Bạn có thể sử dụng một vòng lặp đơn để lặp qua phạm vi ô một chiều.
Đặt liên kết: / vba-create-a-macro # command-button [command button]
trên trang tính của bạn và thêm các dòng mã sau:
Dim i As Integer For i = 1 To 6 Cells(i, 1).Value = 100 Next i
Kết quả khi bạn bấm vào nút lệnh trên sheet:
Giải thích: Các dòng mã giữa For và Next sẽ được thực thi sáu lần. Đối với i = 1, Excel VBA nhập giá trị 100 vào ô ở giao điểm của hàng 1 và cột 1. Khi Excel VBA đến Tiếp theo i, nó tăng i với 1 và nhảy trở lại câu lệnh For. Đối với i = 2, Excel VBA nhập giá trị 100 vào ô ở giao điểm của hàng 2 và cột 1, v.v.
Lưu ý: bạn nên luôn thụt lề (tab) mã giữa các từ Cho và Tiếp theo. Điều này làm cho mã của bạn dễ đọc hơn.
Vòng lặp kép
Bạn có thể sử dụng vòng lặp kép để lặp qua một phạm vi ô hai chiều.
Đặt một liên kết: / vba-create-a-macro # command-button [command button]
trên trang tính của bạn và thêm các dòng mã sau:
Dim i As Integer, j As Integer For i = 1 To 6 For j = 1 To 2 Cells(i, j).Value = 100 Next j Next i
Kết quả khi bạn bấm vào nút lệnh trên sheet:
Giải thích: Với i = 1 và j = 1, Excel VBA nhập giá trị 100 vào ô tại giao điểm của hàng 1 và cột 1. Khi Excel VBA đến Tiếp theo j, nó tăng j với 1 và nhảy trở lại câu lệnh For j . Đối với i = 1 và j = 2, Excel VBA nhập giá trị 100 vào ô ở giao điểm của hàng 1 và cột 2. Tiếp theo, Excel VBA bỏ qua Tiếp theo j vì j chỉ chạy từ 1 đến 2. Khi Excel VBA đến Tiếp theo i , nó tăng i với 1 và nhảy trở lại câu lệnh For i. Đối với i = 2 và j = 1, Excel VBA nhập giá trị 100 vào ô ở giao điểm của hàng 2 và cột 1, v.v.
Triple Loop
Bạn có thể sử dụng một vòng lặp ba để lặp qua các phạm vi hai chiều trên nhiều trang tính Excel.
Đặt một liên kết: / vba-create-a-macro # command-button [command button]
trên trang tính của bạn và thêm các dòng mã sau:
Dim c As Integer, i As Integer, j As Integer For c = 1 To 3 For i = 1 To 6 For j = 1 To 2 Worksheets(c).Cells(i, j).Value = 100 Next j Next i Next c
Giải thích: Thay đổi duy nhất được thực hiện so với mã cho vòng lặp kép là chúng tôi đã thêm một vòng lặp nữa và thêm Bảng tính (c). ở phía trước Ô để lấy phạm vi hai chiều trên trang đầu tiên cho c = 1, trang thứ hai cho c = 2 và trang thứ ba cho c = 3. Tải xuống tệp Excel để xem kết quả này.
Do While Loop
Bên cạnh vòng lặp For Next, còn có các vòng lặp khác trong Excel VBA. Ví dụ, vòng lặp Do While. Mã được đặt giữa Do While và Loop sẽ được lặp lại miễn là phần sau Do While là đúng.
-
Đặt một
liên kết: / vba-create-a-macro # command-button [command button]
trên trang tính của bạn và thêm các dòng mã sau:
Dim i As Integer i = 1 Do While i < 6 Cells(i, 1).Value = 20 i = i + 1 Loop
Kết quả khi bạn bấm vào nút lệnh trên sheet:
Giải thích: miễn là i thấp hơn 6, Excel VBA nhập giá trị 20 vào ô ở giao điểm của hàng i và cột 1 và tăng i lên 1. Trong Excel VBA (và trong các ngôn ngữ lập trình khác), ký hiệu ‘= ‘nghĩa là trở thành. Nó không có nghĩa là bình đẳng. Vì vậy, i = i + 1 có nghĩa là i trở thành i + 1. Nói cách khác: lấy giá trị hiện tại của i và thêm 1 vào nó. Ví dụ: nếu i = 1, i trở thành 1 + 1 = 2. Kết quả là, giá trị 20 sẽ được đặt vào cột A năm lần (không phải sáu vì Excel VBA dừng khi tôi bằng 6).
-
Nhập một số số vào cột A.
-
Đặt một
liên kết: / vba-create-a-macro # command-button [command button]
trên trang tính của bạn và thêm các dòng mã sau:
Dim i As Integer i = 1 Do While Cells(i, 1).Value <> "" Cells(i, 2).Value = Cells(i, 1).Value + 10 i = i + 1 Loop
Kết quả khi bạn bấm vào nút lệnh trên sheet:
Giải thích: miễn là Ô (i, 1). Giá trị không trống (<> nghĩa là không bằng), Excel VBA nhập giá trị vào ô ở giao điểm của hàng i và cột 2, cao hơn 10 giá trị trong ô ở giao điểm của hàng i và cột 1. Excel VBA dừng khi tôi bằng 7 vì Ô (7, 1) .Value trống. Đây là một cách tuyệt vời để lặp qua bất kỳ số hàng nào trên trang tính.