Cách sử dụng vòng lặp For Each trong Excel VBA
Vòng lặp và VBA đi cùng nhau và vì một lý do chính đáng. Khi xử lý các đối tượng Microsoft Office như sổ làm việc, trang tính và phạm vi, các vòng lặp có thể giúp bạn chuyển đổi giữa từng đối tượng một cách dễ dàng.
Mặc dù ít nhiều tất cả các vòng lặp VBA đều hoạt động tốt với các đối tượng, nhưng vòng lặp “cho mỗi” là một trong những tùy chọn tốt nhất để hoạt động với các tập hợp đối tượng. Nếu bạn là người mới sử dụng Excel VBA và đang tìm cách nắm vững vòng lặp for, bạn có thể học nhanh từ một số ví dụ này. Đây là tất cả những gì bạn cần biết về vòng lặp tinh túy này.
Mục Lục
Đối với cú pháp của mỗi vòng lặp
Cú pháp vòng lặp for each khá giống với vòng lặp for thông thường trong VBA Excel. Đây là cú pháp:
For each variable_name in object_collection[statement]
[statement]
[statement]
Next variable_name
Vòng lặp bắt đầu với từ khóa “cho mỗi”; bạn có thể sử dụng bất kỳ tên biến nào, theo sau là bộ sưu tập đối tượng. Đối tượng trong mỗi vòng lặp có thể là ô, phạm vi, trang tính và thậm chí cả sổ làm việc. Đó là vẻ đẹp của vòng lặp này; nó mang lại cho bạn sự linh hoạt để làm việc với các bộ sưu tập Excel khác nhau.
Vòng lặp quay vòng qua từng giá trị bộ sưu tập và lưu trữ tham chiếu trong tên biến đã xác định. Sau khi thực thi, VBA thực thi các câu lệnh được lưu trữ trong vòng lặp và di chuyển đến đối tượng tiếp theo trong bộ sưu tập (đối tượng Kế tiếp từ khóa hữu ích ở đây). Hãy hiểu cấu trúc mã với một ví dụ cơ bản.
Cách sử dụng vòng lặp For Each trong Excel VBA
Giả sử bạn muốn in một số trong các ô từ A1 đến A10. Cách tiếp cận tốt nhất là sử dụng vòng lặp for each với hàm phạm vi và để mã thực hiện việc cần thiết. Đây là cách bạn có thể thực hiện nhiệm vụ đơn giản này:
- Mở trình soạn thảo mã VBA bằng cách nhấn thay thế + F11.
- Chèn một mô-đun bằng cách nhấp vào mô-đun tùy chọn trong Chèn chuyển hướng.
- Tạo một quy trình con bằng cách sử dụng lệnh sub() trong cửa sổ mô-đun trình soạn thảo mã. Đảm bảo rằng bạn gán một tên có ý nghĩa cho quy trình phụ. Đối với ví dụ này, bạn có thể sử dụng tên for_each_loop.
Bây giờ những điều cơ bản đã hết, đã đến lúc bắt đầu viết mã. Trong quy trình phụ, nhập các lệnh sau:
Dim cell as rangeFor each cell in Sheets("Sheet1").Range("A1:A10")
cell.value = 10
Next cell
Khi mã thực thi, c biến sẽ lưu trữ giá trị của A1. Tiếp theo, khi chuyển sang câu lệnh trong vòng lặp, nó sẽ đánh giá câu lệnh và nhập giá trị 10 vào ô đã xác định, tức là ô A1.
Cuối cùng, khi nó di chuyển đến từ khóa Tiếp theo, nó sẽ di chuyển đến giá trị tiếp theo, tức là ô A2. Vòng lặp chạy cho đến khi đến ô A10. Đây là đầu ra cuối cùng:
Sử dụng Vòng lặp với Đối tượng: Ô, Trang tính và Sổ làm việc
Excel có ba loại đối tượng chính mà bạn làm việc thường xuyên. Đây là các ô, trang tính và sổ làm việc. Đây là cách bạn có thể sử dụng vòng lặp với cả ba loại đối tượng.
Làm việc với các ô và vòng lặp cùng nhau
Giả sử bạn muốn thêm một giá trị và một số điều kiện định dạng vào một dải ô trong Trang tính 1. Bước đầu tiên, bạn cần xác định các điều kiện trong vòng lặp, tiếp theo là các lệnh định dạng.
Nhập mã sau vào một quy trình phụ.
Sub for_each_loop()Dim c As Range
For Each c In Sheets("Sheet1").Range("A1:A10")
With c
.Value = 10
.Font.Color = vbRed
.Font.Bold = True
.Font.Strikethrough = True
End With
Next c
End Sub
Các với chức năng hữu ích khi thực hiện nhiều chức năng với một đối tượng cụ thể. Vì bạn muốn thực hiện một loạt tác vụ với biến c, nên bạn có thể kết hợp tất cả chúng bằng hàm with..end with.
Vòng lặp cân bằng giá trị của c với từng giá trị ô và nhập giá trị là 10. Ngoài ra, nó thay đổi màu của ô thành màu đỏ, in đậm giá trị và gạch chéo giá trị đó. Sau khi hoàn thành tất cả các bước, nó sẽ chuyển sang giá trị được xác định tiếp theo trong phạm vi.
Sử dụng vòng lặp để điều khiển trang tính
Tương tự như ví dụ trên, bạn có thể sử dụng vòng lặp for each để điều khiển các trang tính. Làm cách nào để thay đổi tên của Sheet1 thành Sheet3 bằng VBA?
Bạn có thể sử dụng đoạn mã sau để đổi tên một trang tính hiện có trong Excel bằng VBA:
Sub for_each_loop_sheets()For Each sht In ThisWorkbook.Sheets
If sht.Name = "Sheet1" Then
sht.Name = "Sheet3"
End If
Next sht
End Sub
Đoạn mã lặp qua từng trang tính trong sổ làm việc và kiểm tra tên của từng trang tính. Nếu gặp tên Sheet1, nó sẽ đổi thành Sheet3. Nó tiến triển qua các trang tính còn lại, nếu có, trong sổ làm việc. Khi thực thi mã đến trang cuối cùng, nó sẽ thoát khỏi vòng lặp và quy trình phụ.
Trong số một số cách sử dụng phổ biến khác, bạn có thể hợp nhất nhiều trang tính bằng VBA và cập nhật nội dung trong một trang tính bằng vòng lặp.
Chuyển qua sổ làm việc bằng vòng lặp
Cuối cùng, bạn có thể sử dụng vòng lặp for each để chuyển qua các sổ làm việc khác nhau và thực hiện các tác vụ cụ thể. Hãy chứng minh chức năng này với một ví dụ.
Bạn có thể sử dụng các lệnh VBA để thêm ba sổ làm việc mới và đóng tất cả các sổ đang mở lại với nhau. Đây là cách bạn có thể làm điều đó:
Sub loop_wrkbook()Dim wrkbook as workbook
Workbooks.Add
Workbooks.Add
Workbooks.Add
For Each wrkbook In Workbooks
wrkbook.Close
Next wrkbook
End Sub
Đoạn mã trên cũng sẽ đóng sổ làm việc macro của bạn; đảm bảo bạn đã lưu mã của mình trước khi chạy mã này.
Vì các vòng lặp có nhiều mục đích sử dụng nên bạn cũng có thể hợp nhất dữ liệu từ nhiều sổ làm việc vào một sổ làm việc duy nhất.
Sử dụng câu lệnh IF lồng nhau với vòng lặp
Giống như ví dụ trên, bạn có thể sử dụng câu lệnh IF trong vòng lặp để kiểm tra các điều kiện cụ thể. Hãy thay đổi màu nền của ô dựa trên các giá trị của ô.
Có một vài số ngẫu nhiên trong ô A1:A20. Bạn có thể viết một vòng lặp để duyệt qua từng ô đã cho trong phạm vi; nếu giá trị của ô nhỏ hơn 10, màu ô sẽ chuyển sang màu đỏ. Nếu giá trị ô vượt quá 10, nó sẽ chuyển sang màu xanh lục. Sử dụng đoạn mã sau cho mục đích này:
Sub loop_w_if()Dim c As Range
For Each c In Sheets("Sheet4").Range("A1:A20")
If c.Value < 10 Then
c.Interior.ColorIndex = 3
Else: c.Interior.ColorIndex = 4
End If
Next c
End Sub
Đây là những gì đầu ra trông giống như:
Sử dụng Vòng lặp trong Excel VBA
Excel VBA không bị giới hạn chỉ cho mỗi vòng lặp. Có nhiều vòng lặp hữu ích cho phép bạn thực hiện các chức năng khác nhau một cách dễ dàng. Trả giá cho các tác vụ thủ công, thông thường, vì các vòng lặp của VBA như vòng lặp for, do while và do until bước vào để làm cho cuộc sống của bạn dễ dàng hơn.