Vòng lặp VBA Excel

0
14

Để hoạt động hiệu quả trong VBA, bạn phải hiểu Loops.

Vòng lặp cho phép bạn lặp lại một khối mã một số lần đặt hoặc lặp lại một khối mã trên mỗi đối tượng trong một tập hợp các đối tượng.

Đầu tiên chúng tôi sẽ cho bạn thấy một vài ví dụ để cho bạn thấy những vòng lặp có khả năng. Sau đó, chúng tôi sẽ dạy cho bạn mọi thứ về các vòng lặp.

Ví dụ nhanh về vòng lặp VBA

Đối với mỗi Loop

Đối với mỗi vòng lặp lặp qua mọi đối tượng trong một bộ sưu tập, chẳng hạn như mọi trang tính trong sổ làm việc hoặc mỗi ô trong một phạm vi.
Lặp lại tất cả các bảng tính trong Workbook

Mã này sẽ lặp qua tất cả các trang tính trong sổ làm việc, bỏ ẩn từng trang tính

Sub   LoopThroughSheets ( ) 
Dim ws As Worksheet
 For   Each   ws  In   Worksheets 
     ws . Visible   =   True 
 Next 
End   Sub 

Vòng qua tất cả các ô trong phạm vi

Mã này sẽ lặp qua một phạm vi ô , kiểm tra xem giá trị ô có âm, dương hay không

Sub   If_Loop ( ) 
Dim Cell as Range
For   Each   Cell  In   Range ( "A2:A6" ) 
If Cell . Value > 0 Then
Cell . Offset ( 0 , 1 ) . Value = "Positive"
ElseIf Cell . Value < 0 Then
Cell . Offset ( 0 , 1 ) . Value = "Negative"
Else
Cell . Offset ( 0 , 1 ) . Value = "Zero"
End If
Next Cell
End   Sub 

Đối với vòng lặp tiếp theo

Một kiểu khác của Vòng lặp đối với Vòng lặp là Vòng lặp tiếp theo. Vòng lặp tiếp theo cho phép bạn lặp qua các số nguyên.

Mã này sẽ lặp qua các số nguyên từ 1 đến 10, hiển thị mỗi số có hộp thông báo:

Sub   ForLoop ( ) 
Dim i As Integer
For i = 1 To 10
MsgBox i
Next i
End Sub

Làm trong khi vòng

Do While Loops sẽ lặp trong khi một điều kiện được đáp ứng. Mã này cũng sẽ lặp qua các số nguyên từ 1 đến 10, hiển thị mỗi số có hộp thông báo.

Sub   DoWhileLoop ( ) 
Dim n As Integer
n = 1
Do While n < 11
MsgBox n
n = n + 1
Loop
End Sub

Làm cho đến khi vòng

Ngược lại, Do Until Loops sẽ lặp cho đến khi một điều kiện được đáp ứng. Mã này làm điều tương tự như hai ví dụ trước.

Sub   DoUntilLoop ( ) 
Dim n As Integer
n = 1
Do Until n >= 10
MsgBox n
n = n + 1
Loop
End Sub

Chúng tôi sẽ thảo luận về vấn đề này bên dưới, nhưng bạn cần cực kỳ cẩn thận khi tạo các vòng lặp Do While hoặc Do Until để bạn không tạo vòng lặp không bao giờ kết thúc.

Trình tạo vòng lặp VBA

Đây là một ảnh chụp màn hình của Trình tạo vòng lặp kiểu máy tính từ Chế độ bổ trợ VBA cao cấp của chúng tôi : AutoMacro . Loop Builder cho phép bạn nhanh chóng và dễ dàng xây dựng các vòng lặp để lặp qua các đối tượng hoặc số khác nhau. Bạn có thể thực hiện các hành động trên từng đối tượng và / hoặc chỉ chọn các đối tượng đáp ứng các tiêu chí nhất định.

Bổ trợ cũng chứa nhiều trình xây dựng mã khác, thư viện mã VBA mở rộng và một loại công cụ mã hóa. Đó là điều bắt buộc đối với bất kỳ nhà phát triển VBA nào.

Bây giờ chúng tôi sẽ bao gồm các loại vòng khác nhau theo chiều sâu.

VBA cho vòng lặp tiếp theo

Đối với cú pháp vòng lặp

Vòng lặp tiếp theo cho phép bạn lặp lại một khối mã với số lần được chỉ định. Cú pháp là:

[ Dim   Counter  as   Integer ] 
For   Counter   =   Start  to   End   [ Step   Value ] 
[ Do Something ]
Next [ Counter ]

Trong đó các mục trong ngoặc là tùy chọn.

[Dim Counter as Long] – Khai báo biến đếm. Bắt buộc nếu Tùy chọn Giải thích được khai báo ở đầu mô-đun của bạn. Bộ đếm – Một biến số nguyên được sử dụng để đếm Bắt đầu – Giá trị bắt đầu (Ví dụ 1) Kết thúc – Giá trị cuối (Ví dụ 10) [Giá trị bước] – Cho phép bạn đếm mọi n số nguyên thay vì mỗi 1 số nguyên. Bạn cũng có thể đi ngược lại với giá trị âm (ví dụ: Bước -1) [Làm gì đó] – Mã sẽ lặp lại Tiếp theo [Bộ đếm] – Đóng câu lệnh cho Vòng lặp tiếp theo. Bạn có thể bao gồm Bộ đếm hoặc không. Tuy nhiên, tôi thực sự khuyên bạn nên bao gồm bộ đếm vì nó làm cho mã của bạn dễ đọc hơn.

Nếu điều đó gây nhầm lẫn, đừng lo lắng. Chúng tôi sẽ xem xét một số ví dụ:

Đếm đến 10

Mã này sẽ được tính đến 10 bằng cách sử dụng Vòng lặp tiếp theo:

Sub   ForEach_CountTo10 ( ) 
Dim   n   As   Integer 
For n = 1 To 10
MsgBox n
Next n
End   Sub 

Đối với bước lặp

Đếm đến 10 – Chỉ các số chẵn

Mã này sẽ đếm đến 10 chỉ đếm số chẵn:

Sub   ForEach_CountTo10_Even ( ) 
Dim   n   As   Integer 
For n = 2 To 10 Step 2
MsgBox n
Next n
End   Sub 

Thông báo chúng tôi đã thêm vào Bước Bước 2. Điều này báo cho Vòng lặp đến Vòng lặp Bước qua bộ đếm bằng 2. Chúng ta cũng có thể sử dụng giá trị bước âm để bước ngược lại:

Đối với Bước vòng – Nghịch đảo

Đếm ngược từ 10

Mã này sẽ đếm ngược từ 10:

Sub   ForEach_Countdown_Inverse ( ) 
Dim   n   As   Integer 
For n = 10 To 1 Step - 1
MsgBox n
Next n
MsgBox "Lift Off"
End   Sub 

Xóa hàng nếu ô trống

Tôi thường xuyên sử dụng một bước For-Loop tiêu cực để lặp qua các phạm vi ô, xóa các hàng đáp ứng các tiêu chí nhất định. Nếu bạn lặp từ các hàng trên cùng xuống các hàng dưới cùng, khi bạn xóa các hàng, bạn sẽ làm rối bộ đếm của mình.

Ví dụ này sẽ xóa các hàng có các ô trống (bắt đầu từ hàng dưới cùng):

Sub   ForEach_DeleteRows_BlankCells ( ) 
Dim   n   As   Integer 
For n = 10 To 1 Step - 1
If Range ( "a" & n ) . Value = "" Then
Range ( "a" & n ) . EntireRow . Delete
End If
Next n
End   Sub 

Lồng cho vòng lặp

Bạn có thể lồng vào nhau một vòng cho vòng lặp khác. Chúng tôi sẽ sử dụng Nested For Loops để tạo bảng nhân:

Sub   Nested_ForEach_MultiplicationTable ( ) 
Dim   row  As   Integer ,   col  As   Integer 
For   row   =   1   To   9 
For col = 1 To 9
Cells ( row + 1 , col + 1 ) . Value = row * col
Next col
Next row
End   Sub 

Chúc các bạn thành công! Tham khảo khóa học VBA Excel tại NIIT-ICT Hà Nội

Xem thêm: 18 mã VBA Excel hữu ích giúp tiết kiệm thời gian

LEAVE A REPLY

Please enter your comment!
Please enter your name here