Vòng lặp FOR trong VBA và các ví dụ cách sử dụng

Khi thao tác đọc hay ghi dữ liệu trên bảng tính Excel được thực hiện lặp nhiều lần. Đó là lúc bạn cần sử dụng đến vòng lặp để đơn giản hóa các thao tác lặp đó.

Trong VBA, sử dụng vòng lặp FOR có thể giúp bạn tùy biến để quét kiểm tra tất cả dữ liệu hay ghi dữ liệu được lập trình sẵn vào các Cells trong một Range. Và dưới đây là một số thông tin và ví dụ về cách sử dụng vòng lặp FOR mà bạn có thể tham khảo.

Vòng lặp FOR trong VBA

Cú pháp:

Dim i As Integer
For i = n1 To n2 Step n3
' lệnh thực thi
Next i
Code language: PHP (php)

Trong đó:

  • Biến i được khai báo kiểu số, biến này sẽ tăng hoặc giảm theo n3 sau mỗi vòng lặp.
  • n1: là một số, giá trị của n1 sẽ là giá trị bắt đầu của vòng lặp.
  • n2: là một số, giá trị i = (n2 + n3) sẽ là giá trị kết thúc của vòng lặp.
  • n3: là một số, giá trị của n3 là bước nhảy của i sau mỗi lòng lặp. Bỏ “Step n3” nếu không sử dụng, và mặc định là 1.
  • Next i: là lệnh sẽ thực hiện tăng hoặc giảm với giá trị (i + n3).

Giải thích cú pháp:

Vòng lặp For sẽ có 2 kiểu thực hiện là tăng hoặc giảm i theo nước nhảy n3. Tức là nếu sử dụng vòng lập tăng, bạn phải đặt n2 >= n1 và n3 >0. Hoặc ngược lại là vòng lặp giảm, thì n2 <= n1 và n3 phải là một số âm (<0).

Ví dụ: n1=1, n2=9 và n3 =1 thì vòng lặp sẽ thực thi từ giá trị i=1, sau mỗi vòng lặp i sẽ tăng lên i + 1. Và khi i = 9 + 1=10 thì vòng lặp sẽ kết thúc.

Cách ví dụ cách sử dụng vòng lặp FOR

Có nhiều trường hợp bạn có thể ứng dụng vòng lặp FOR vào xử lý dữ liệu. Như quét và ghi giá trị và một Range của bảng tính, kết hợp xử dụng với hàm điều kiện IF để đếm số lần xuất hiện của một giá trị…Và để chi tiết hơn, dưới đây là 3 ví dụ bạn có thể tham khảo.

Ví dụ 1: Ghi giá trị vào range A1:D10

💡 Vì Range A1:D10 là một mảng 2 chiều bao gồm cả hàng và cột, nên ở đây sẽ cần phải sử dụng 2 vòng lặp FOR (vòng lặp FOR lồng nhau).

  • Vòng lặp 1 sẽ dùng để quét hàng từ 1 đến 10
  • Vòng lặp 2 sẽ dùng để quét cột từ A đến D, tức là từ 1 đến 4.

👉 Sau phân tích, chúng ta sẽ có một hàm như sau:

Sub ghigiatriA1D10()
Dim i As Integer
Dim j As Integer
For i = 1 To 10
For j = 1 To 4
Sheets(1).Cells(i, j).Value = "cot " & j & " hang " & i
Next j
Next i
End Sub
Code language: PHP (php)

👍 Kết quả: chạy hàm, Excel sẽ tự động ghi vào Range từ A1:D10 theo giá trị được lập trình.

vong-lap-for-vba-excel-163-1
Ví dụ 2: Đếm có bao nhiêu số lớn hơn 900 từ A1:A100

💡 Range A1:A100 chỉ nằm trong cột A nên ở đây chỉ cần sử dụng 1 vòng lặp FOR. Và để kiểm tra được giá trị là lớn hơn 900, bạn sẽ cần phải sử dụng thêm hàm điều kiện IF.

👉 Như vậy, bạn có thể viết một hàm như sau:

Sub timsolonhon_900()
Dim so As Integer
Dim dem As Integer
Dim luuso As String
Dim i As Integer
For i = 100 To 1 Step -1
so = CInt(Sheets(2).Cells(i, 1).Value)
If (so > 900) Then
dem = dem + 1
luuso = luuso & so & " "
End If
Next i
MsgBox "Co " & dem & " so lon hon 900 la: " & luuso
End Sub
Code language: PHP (php)

Trong hàm trên, bạn để ý một số lệnh sau:

  • CInt(Sheets(2).Cells(i, 1).Value): hàm CInt() là hàm chuyển chuỗi về kiểu Integer.
  • dem = dem + 1: tức là sau mỗi lần kiểm tra, nếu biến so lớn hơn 900 sẽ cộng thêm 1.
  • luuso = luuso & so & ” “: cộng chuỗi sau mỗi vòng lặp.

👍 Kết quả: chạy hàm, bạn sẽ có được số lần xuất hiện và số lớn hơn 900.

vong-lap-for-vba-excel-163-2
Ví dụ 3: Thoát vòng lặp FOR khi gặp giá trị cuối cùng nhỏ hơn 100

Để thoát vòng lặp FOR khi vòng lặp chưa kết thúc, bạn sử dung lệnh Exit For. Như trong ví dụ 2, bạn có thể thay đổi lại chương trình là kiểm tra nếu số nhỏ hơn 100 thì thoát vòng lặp.

For i = 100 To 1 Step -1
so = CInt(Sheets(2).Cells(i, 1).Value)
If (so < 100) Then
Exit For
End If
Next i
MsgBox "Thoat vong lap tai i = " & i
Code language: PHP (php)

👍 Kết quả: chạy hàm, bạn sẽ có được vị trí cuối cùng có giá trị < 100.

vong-lap-for-vba-excel-163-3

OK! Trên là cách sử dụng vòng lặp FOR trong VBA Excel. Khi sử dụng vòng lặpFOR, bạn cũng nên lưu ý là tránh sử dụng quá nhiều vòng lặp vì nó sẽ ảnh hưởng đến thời gian xử lý của Excel. Và cũng nên tránh sử dụng Msgbox trong vòng lặp nên vì nó sẽ hiện cho đến khi thực hiện hết vòng lặp.

Chúc các bạn thành công!

BÌNH LUẬN

Please enter your comment!
Please enter your name here