Cách dùng vòng lặp For Next trong VBA Excel

For ... Next là một vòng lặp cố định sử dụng biến đếm để chạy số lần lặp mà bạn chỉ định và khi nó đạt đến vòng lặp đếm đó, nó sẽ tự động dừng lại.
Cách dùng vòng lặp For Next trong VBA Excel

Hinh anh vong lap for next trong vba excel

Vòng lặp For...Next là gì ?

Đối với các lập trình viên chuyên nghiệp, một trong những lý do chính khiến họ bắt đầu viết mã là họ đang cố gắng tự động hóa một quy trình thủ công trong cuộc sống của chính họ để họ không phải tự làm điều đó.

Đây là lúc sức mạnh của mã máy tính - so với việc thực hiện các thao tác thủ công - trở nên thực sự rõ ràng và một trong những công cụ đầu tiên chúng ta có thể sử dụng để mở khóa các tự động hóa này là vòng lặp.

Các vòng lặp về cơ bản chỉ là một cách lặp lại các hành động bằng mã máy tính, nhưng ở tốc độ máy tính và quy mô máy tính, chẳng hạn: Hãy tưởng tượng bạn phải thực hiện một số thao tác giống nhau với vài chục bảng tính. Thực tế, bạn sẽ mất rất nhiều thời gian để thực hiện, nhưng VBA Excel có thể hoàn thành các tác vụ như thế này chỉ trong vài giây.

Có một số loại vòng lặp trong VBA, Trong bài viết hôm nay, chúng tôi sẽ đề cập đến vòng lặp For ... Next. Ngoài ra, các bạn có thể tham khảo bài viết về vòng lặp Do...While...Loop trong VBA Excel tại đây.

For ... Next là một vòng lặp cố định sử dụng biến đếm để chạy các lần lặp. Nói một cách đơn giản, bạn cần chỉ định số lần bạn muốn chạy vòng lặp và khi nó đạt đến vòng lặp đếm đó, nó sẽ tự động dừng lại. Đó là lý do tại sao nó là một vòng lặp cố định và phổ biến nhất trong VBA Excel.

Cú pháp:

For counter = start to end [step increment]

[statements1]

[statements 2]

[statements 3]

....

[ Statement n]

Next [counter]

Trong đó:

Counter (Biến đếm): Một biến chữ số được sử dụng làm biến đếm vòng lặp, nó lưu trữ số lần lặp lại và tăng giá trị của nó với mỗi lần lặp lại, chẳng hạn: nếu vòng lặp đang ở lần lặp thứ chín, giá trị của biến đếm sẽ là chín và khi vòng lặp thực thi câu lệnh cho lần lặp thứ chín, giá trị của biến đếm sẽ thay đổi thành mười.

Start (Bắt đầu): Giá trị ban đầu của biến đếm. Thường là 1, nhưng bạn có thể nhập bất kỳ giá trị nào.

End (Kết thúc): Đây là một biến số lưu trữ giá trị cuối cùng của biến đếm.

Increment (gia số): Giá trị tùy ý này xác định gia số cho biến đếm vòng lặp. Nếu bạn để trống nó, giá trị mặc định sẽ là 1. Sử dụng một số âm để giảm biến đếm.

Statement (câu lệnh): Các câu lệnh để thực thi mỗi lần qua vòng lặp.

Next (Tiếp theo): Đó là câu lệnh kết thúc cho một lần lặp của vòng lặp và sử dụng giá trị biến đếm để yêu cầu VBA lặp lại vòng lặp và khi biến đếm đạt đến giá trị cuối cùng, nó sẽ kết thúc vòng lặp.

Sơ đồ khối:

Hinh anh vong lap for next trong vba excel 1

Quy trình điều khiển trong vòng lặp For...Next:

Khi VBA gặp câu lệnh For...Next, nó sẽ thực hiện quy trình năm bước sau:

1. Xác lập biến đếm bằng start.

2. Kiểm tra biến đếm. Nếu nó lớn hơn End, tắt vòng lặp (nghĩa là quá trình câu lệnh đầu tiên sau câu lệnh Next). Ngược lại, điều kiện được đánh giá còn đúng thì tiếp tục. Nếu gia số là âm, VBA sẽ kiểm tra xem biến đếm có nhỏ hơn End hay không.

3. Thực thi mỗi câu lệnh giữa For và Next.

4. Thêm gia số cho biến đếm. Thêm 1 cho biến đếm nếu gia số không được chỉ định.

5. Lặp lại bước 2 đến bước 4 cho đến khi nào thực hiện xong.

Một số lưu ý khi sử dụng vòng lặp For...Next:

Nếu bạn sử dụng một số dương làm gia số (tăng), end phải lớn hơn hoặc bằng start. Nếu bạn sử dụng một số âm làm gia số, end phải nhỏ hơn hoặc bằng start.

● Nếu start bằng với end, vòng lặp sẽ thực thi vòng lệnh.

● Hãy thụt vào các câu lệnh bên trong vòng lặp For...Next để dễ đọc.

● Giữ cho số biến được xác định trong một thủ tục là tối thiểu, luôn cố gắng sử dụng cùng tên cho tất cả các biến lặp For...Next. Tích trữ i đến n được sử dụng làm các biến đếm trong lập trình.

● Để các vòng lặp nhanh nhất, đừng sử dụng tên biến đếm sau câu lệnh Next.

● Nếu bạn cần cho một vòng lặp For...Next trước số lần lặp được xác định trước, hãy sử dụng câu lệnh Exit For để tắt vòng lặp.

Ví dụ 1:

Khi bạn đang muốn tính tổng các số từ 1 đến 100, bạn có thể muốn đặt giá trị của một biến thành 1 và hiển thị nó 100 lần, tăng giá trị của nó lên 1 trên mỗi lần lặp lại vòng lặp. Logic tương tự được sử dụng trong VBA.

Chúng tôi chỉ định số lần chúng tôi phải chạy vòng lặp, sau đó chỉ định mã nào vòng lặp của chúng tôi sẽ thực thi mỗi khi vòng lặp chạy.

Một vòng lặp có 3 phần, phần đầu tiên là khởi tạo, phần thứ hai là điều kiện mà vòng lặp chạy và phần cuối cùng là tăng hoặc giảm.

data-matched-content-rows-num="2,2" data-matched-content-columns-num="1,2" data-matched-content-ui-type="image_stacked,image_stacked" data-ad-format="autorelaxed"

Bây giờ chúng ta hãy làm ví dụ trên để hiểu vòng lặp for hoạt động như thế nào. Thực hiện theo các thao tác dưới đây:

Mở Tab Developer > chọn Trình soạn thảo Visual Basic từ nhóm Code hoặc bạn cũng có thể nhấn tổ hợp phím Alt + F11 để mở VBA (trình soạn thảo trực quan cơ bản nơi chúng ta có thể viết mã) hoặc Nhấp chuột phải vào tên sổ làm việc, rồi chọn > View code, sau đó > nhấn vào Insert > chọn Module để chèn một mô-đun. Sau khi một mô-đun được chèn vào, chúng ta có thể viết mã của mình. Giả sử chúng ta đang viết mã in tổng của 100 số đầu tiên, vì vậy mã của chúng ta sẽ như sau:


Sub Tinh_tong() 
Dim Tong as Integer 
Dim Count as Integer   
Tong = 0 ‘khởi tạo tổng là 0 
For count = 1 to 100 
Tong = Tong + count 
Next count ‘bộ đếm tăng count = count + 1 
Range("sheet1!B2").Value = Tong ‘Gán giá trị tổng vào ô B2 của Sheet1 
End Sub ‘mã kết thúc

Giải thích những gì đã xảy ra trong đoạn mã trên:

● Ở đây trong dòng đầu tiên, chúng tôi viết chủ đề của mã, đây chủ yếu là điểm mà mã của chúng tôi bắt đầu thủ tục cũng rất quan trọng vì nó chia các đoạn mã lớn thành các phần nhỏ.

● Như chúng ta sử dụng để khai báo trong chương trình bình thường của mình, chúng ta khai báo hai số nguyên, biến số đầu tiên là tổng trong đó nó sẽ lưu trữ tổng và số còn lại là số đếm để đếm n biến trong một vòng lặp.

● Vòng lặp "for...next" bắt đầu tại đây từ số đếm = 1 và sẽ chạy cho đến khi số đếm bằng 100.

● Sau đó, chúng tôi sẽ tính tổng số bằng cách thêm số đếm vào tổng số:

Tong = Tong + count

● Sau đó, chúng tôi tăng số đếm lên 1 và lặp lại các thao tác trên cho đến khi số đếm là 100.

● Ở cuối vòng lặp, chúng tôi sẽ hiển thị đầu ra bằng ô B2 của Bảng tính.

● Cuối cùng, chúng ta sẽ kết thúc chủ đề tính tổng.

Kết quả Đầu ra:

Hinh anh vong lap for next trong vba excel 2

Ví dụ 2: Tính giai thừa của n:

Ta biết n! = 1 x 2 x 3 x.... x n.

Ta thấy, bài toán rất thích hợp để dùng vòng lặp For...Next

Xác định số lần tính: ta thấy n! có (n-1) phép tính nhân. Ta chọn số lần lặp là n, ta viết for i =1 to n

Xác định câu lệnh thực hiện nhân:

Phải đặt 1 biến là kq

Giá trị của kq là giá trị của kết quả trước đó nhân với giá trị hiện tại của i vì i tăng lên sau mỗi vòng lặp, ta lấy luôn i làm thừa số cho phép nhân.

Vậy ta có câu lệnh: kq = kq * i

Đến đây ta phải giả định rằng khi chạy vòng đầu tiên, có trục trặc gì không. Có ở chỗ chưa có giá trị ban đầu của kq nên không nhân được. vậy ta gán giá trị ban đầu của kq là 1:

Ta viết kq = 1 ở bên trên vòng lặp For...Next

Thứ hai ta giả định rằng sau n vòng lặp giá trị của kq là như thế nào. ta được kq = 1 * 1 * 2 * 3 * ...*n

Như vậy, ta sẽ viết thủ tục tính giai thừa như sau:


Sub Tinh_giai_thua()
Dim i, n as long
Dim kq as long
n=InputBox("Nhap vao so vong lap n ?")
kq = 1
For i = 1 To n
kq = kq * i
Next i
Range("sheet1!B6").Value = kq
End Sub

Giải thích mã:

● Như chúng ta sử dụng để khai báo trong chương trình bình thường của mình, chúng ta khai báo ba số nguyên, trong đó i là biến đếm, n là số lần lặp, biến số kq là kết quả tính giai thừa của n, nó sẽ lưu trữ tích của n thừa số.

● Sử dụng hộp thoại inputbox() để yêu cầu người dùng nhập vào số lần lặp, sau đó gán cho biến n.

● Vòng lặp "for... next" bắt đầu tại đây từ số đếm bằng 1 và sẽ chạy cho đến khi số đếm bằng n.

● Sau đó, chúng tôi sẽ tính tích số bằng cách nhân số đếm vào kq:

kq= kq*i

● Sau đó, chúng tôi tăng biến đếm lên 1 và lặp lại các thao tác trên cho đến khi số đếm là n.

● Ở cuối vòng lặp, chúng tôi sẽ hiển thị đầu ra tại ô B6 của Sheet1.

● Cuối cùng, chúng ta sẽ kết thúc chủ đề tính giai thừa n.

Thực hiện theo các thao tác dưới đây:

Để chạy thủ tục trên đây. Các bạn nhấn chuột phải vào Sheet1 > chọn View code > cửa sổ soạn thảo mã VBA sẽ mở ra, các bạn nhấn vào Insert > chọn Module. Sau đó chép đoạn mã trên dán vào Module. Nhấn F5 để thực thi thủ tục.

Kết quả thực thi như hình ảnh dưới đây:

Hinh anh vong lap for next trong vba excel 3

Đăng nhận xét