Macro VBA – Loop (Vòng lặp)

Vòng lặp là một trong những kỹ thuật lập trình mạnh mẽ, thường được sử dụng . Vòng lặp cho phép bạn lặp lại các thao với một đoạn code đơn giản.

Single Loop – Vòng lặp đơn giản

You can use a single loop to loop through a one-dimensional range of cells.

Đặt command button vào worksheet của bạn và paste đoạn code bên dưới:

Dim i As Integer
For i = 1 To 6
    Cells(i, 1).Value = 100
Next i

Kết quả khi click vào command button:

74

Giải thích: Các dòng lệnh giữa For và Next sẽ được thực hiện sáu lần. Với i = 1, Excel VBA gán giá trị 100 vào ô giao nhau của dòng 1 và cột 1. Sau đó, với Next i, nó tăng i thêm 1 và quay trở về với câu lệnh giữa For và Next. For i = 2, Excel VBA gán giá trị 100 vào ô giao nhau của dòng 2 và cột 1. Sau đó, với Next i, tăng i thêm 1 và trở về câu lệnh giữa For và Next,…

Chú ý: Bạn nên dùng Tab  để đoạn code giữa For và Next thụt vào một chút, như vậy code sẽ dễ đọc hơn.

Double Loop – Vòng lặp hai chiều

Đặt command button vào worksheet của bạn và paste đoạn code bên dưới:

Dim i As Integer, j As IntegerFor i = 1 To 6
    For j = 1 To 2
        Cells(i, j).Value = 100
    Next j
Next i

Kết quả khi click vào command button:

75

Giải thích: For i = 1 và j = 1, Excel VBA gán giá trị 100 vào ô giao nhau của dòng 1 và cột 1. Sau đó với Next j, nó tăng j thêm 1 và quay trở về với đoạn lệnh For j . For i = 1 và j = 2, Excel VBA gán giá trị 100 vào ô giao nhau của dòng 1 và cột 2. Tiếp theo, khi j đã chạy hết vòng lặp của nó, Excel VBA bỏ qua Next j, thực hiện Next i , tăng i với 1 và quay trở về với For i. For i = 2, j = 1, Excel VBA gán giá trị 100 vào ô giao nhau của dòng 2 và cột 1. Sau đó với Next j, nó tăng j thêm 1…

Triple Loop – Vòng lặp ba chiều

Đặt command button vào worksheet của bạn và paste đoạn code bên dưới:

Dim c As Integer, i As Integer, j As IntegerFor 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: Với vòng lặp hai chiều bên trên, ta thêm một vòng lặp nữa là Worksheets(c). ở trước Cells(I,j) để thực hiện vòng lặp hai chiều cho sheet for c = 1 – Worksheets(1), sau đó đến sheet thứ 2 for c = 2 – Worksheets(3) và sheet thứ 3 for c = 3 – Worksheets(3). Download file Excel trong bài viết để xem kết quả

Do While Loop

Ngoài vòng lặp For Next, ta có thể sử dụng Do While. Đoạn code đặt giữa Do While Loop sẽ được lặp lại đến khi điều kiện sau Do While vẫn đúng.

Đặt command button vào worksheet của bạn và paste đoạn code bên dưới:

Dim i As Integer
i = 1Do While i < 6
    Cells(i, 1).Value = 20
    i = i + 1
Loop

Kết quả khi click vào command button:

76

Giải thích: Khi i nhỏ hơn 6, Excel VBA gán giá trị 20 vào ô giao nhau của hàng i, cột 1 và tăng i thêm 1. Trong Excel VBA (và các ngôn ngữ lập trình khác), biểu tượng ‘=’ có nghĩa là trở thành, không có nghĩa là bình đẳng. Vì vậy, i = i + 1 có nghĩa là i sẽ 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 đó. Ví dụ, nếu i = 1, i =i+1 thì i trở thành 2. Nếu i=2, i=i+1 thì i trở thành 3,…
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 lại khi i bằng 6).

2. Nhập một số giá trị ở cột A.

77

3. Đặt command button vào worksheet của bạn và paste đoạn code bên dưới:

Dim i As Integer
i = 1Do While Cells(i, 1).Value <> “”
    Cells(i, 2).Value = Cells(i, 1).Value + 10
    i = i + 1
Loop

Kết quả khi click vào command button:

78

Giải thích: Khi Cells(i, 1).Value – giá trị ở Cells(i,1) không bị trống , Excel VBA gán giá trị vào các ô giao nhau của hàng i và cột 2: Lấy giá trị ở hàng i, cột 1cộng thêm 10. Excel VBA dừng lại khi i bằng 7 vì Cells (7, 1) .Value là trống. Đây là một cách rất hay để chạy vòng lặp qua tất cả các hàng có giá trị trên một worksheet.

Comment ( 1 )

  1. / Replytienthe87Đào Tiến Thể
    Câu lệnh cuối theo ý tưởng thì rất hay nhưng mà đang bị lỗi bác xem lại Dim i As Integer, j As IntegerFor i = 1 To 6 For j = 1 To 2 Cells(i, j).Value = 100 Next j Next i Dim i As Integer i = 1Do While Cells(i, 1).Value “” Cells(i, 2).Value = Cells(i, 1).Value + 10 i = i + 1 Loop

Gửi nhận xét