Vòng lặp For Each trong VBA

Trong bài này mình sẽ hướng dẫn cách sử dụng vòng lặp For Each trong VBA, đây là vòng lặp rất hữu ích khi bạn muốn lặp qua một tập hợp nào đó như mảng, danh sách các trong một Range của Excel.

Chúng ta đã được học qua một số vòng lặp trong VBA rồi, nhưng bài này mình muốn mô tả chi tiết hơn về cách sử dụng vòng lặp này để lặp qua các ô trong Excel để xử lý chúng.

1. Cú pháp vòng lặp For Each trong VBA

Vòng lặp này có cú pháp rất đơn giản.

For Each item In items
    ' code xử lý
Next item

Trong đó:

Bài viết này được đăng tại [kiso.vn]

  • items là một tập hợp, co thể là một mảng, một danh sách được trả về từ một đối tượng nào đó trong VBA như Range, Worksheets.
  • item là biến tạm, dùng để lưu giá trị cho các phần tử trong mỗi lần lặp.

Khác với vòng lặp For, vòng lặp For Each không cần biết trước tổng số lần lặp, bởi nó sẽ duyệt qua từng phần tử cho tới khi gặp phần tử rỗng (tức là đã lặp hết). Chính vì vậy nó được sử dụng rất nhiều khi các bạn làm việc với VBA.

Bạn có thể xem chi tiết hơn tại bài viết vòng lặp for each trong visual basic.

2. Ví dụ về vòng lặp For Each trong VBA

Vì chúng ta chưa học về cách khai báo mảng nên mình sẽ sử dụng bài tập như sau:

Bài tập: Lặp qua các ô từ A1 đến B10, sau đó gán giá trị cho mỗi ô chính là số thứ tự của lần lặp đó.

1. Mình đã tạo một command button và code xử lý sự kiện click của nó như sau.

Private Sub CommandButton1_Click()

    Dim ranges As Range, rag As Range, i As Integer
    
    Set ranges = Range("A1:B10")
        i = 1
    
    For Each rag In ranges
        rag.Value = i
        i = i + 1
    Next rag
    
End Sub

2. Bây giờ mình click vào command button đó thì thu được kết quả.

for each vba JPG

Giải thích: Mỗi lần lặp thì biến rag chính là phần tử (ô) của lần lặp đó, nên ta sử dụng rag.Value = i để gán giá trị cho ô đó.

Trên là cách sử dụng vòng lặp For Each trong VBA, đây là một trong những vòng lặp được sử dụng rất nhiều bởi tính tiện lợi và nhanh gọn của nó. Chúc bạn học tốt nhé!

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *