Có nên dùng vòng for trong vba

Thế nào là vòng lặp
Vòng lặp là việc bạn cho thực hiện đi thực hiện lại một thao tác theo số lần được cho trước. Khi thực hiện vòng lặp, người lập trình thường sử dụng kèm theo các biến số để nạp hoặc kiểm tra một điều kiện nào đó theo yêu cầu.

VD: Bạn có 100 ô với mỗi ô dữ liệu khác nhau, bạn muốn kiểm tra xem trong các ô này có bao nhiêu ô có dữ liệu "A". Lúc này, bạn sẽ thực hiện vòng lặp hết tất cả các ô và đếm xem có bao nhiêu ô có dữ liệu "A". Hiểu đơn giản, Các hàm tổng hợp CountIf, Sumif.. Cũng là một dạng vòng lặp.

Có 3 dạng vòng lặp được dùng chủ yếu trong VBA.


For thường
Cấu trúc vòng lặp này như sau

For {Tên biến} = {Số bắt đầu} to {Số kết thúc} Step {Số bước nhảy}
'//Code gì đó của bạn
Next [Tên biến]

  • {Tên biến}: là tên biến cần thực hiện vòng lặp.
  • {Số bắt đầu}: giá trị biến bắt đầu vòng lặp.
  • {Số kết thúc}: giá trị biến khi kết thúc vòng lặp.
  • Step {Số bước nhảy}: Đây là tuỳ chọn có thể có hoặc không, nếu không thì bước nhảy mặc định là +1.
  • [Tên biến]: Có hay không đều được.

VD: Ta sẽ xem xét VD dưới đây để hiểu hơn về dạng vòng lặp For này.
Đây là bảng dữ liệu ta có trong Sheet1, ta sẽ thực hiện đếm có bao nhiêu số 3 trong vùng dữ liệu này bằng vòng lặp For

Có nên dùng vòng for trong vba

Và đây là kết quả

Có nên dùng vòng for trong vba


Ưu điểm

  • Dễ sử dụng, dùng trong nhiều trường hợp
  • Vòng lặp ngắt quãng giữa các đối tượng dễ dàng

Nhược điểm

  • Vòng lặp dễ bị sót dữ liệu nếu lập trình không tốt

For Each
Tương tự như For thường, thay vì thực hiện vòng lặp từ số bắt đầu đến số kết thúc thì For Each sẽ thực hiện vòng lặp qua các thành phần trong đối tượng khai báo.
Cấu trúc For Each như sau

For Each {Tên biến} In {Đối tượng}
'//Code gì đó của bạn
Next [Tên biến]

  • {Tên biến}: là tên biến cần thực hiện vòng lặp. cần trùng kiểu dữ liệu với {Đối tượng}
  • {Đối tượng}: Đối tượng cần thực hiện vòng lặp.
  • [Tên biến]: Có hay không đều được.

VD: Vẫn như VD ở trên nhưng lần này ta thực hiện bằng vòng lặp For Each

Có nên dùng vòng for trong vba

Và ta vẫn có kết quả tương tự

Có nên dùng vòng for trong vba


Ưu điểm

  • Thược hiện vòng lặp qua tất cả các thành phần trong đối tượng mà không sợ bị sót thành phần.
  • Tuỳ biến được nhiều trường hợp

Nhược điểm

  • Code khó hơn For thường một chút
  • không phù hợp khi thực hiện với mảng nhiều chiều
  • Đối với vòng lặp chỉ duyệt qua một số thành phần trong đối tượng thì không nên dùng.

Do Loop
Vòng lặp sẽ thực hiện đến khi nào điều kiện được cho trước thoả mãn hoặc không thoả mãn tuỳ thuộc vào cách lập trình.
Cấu trúc cơ bản

Do
'Code của bạn
Loop {While | Ulti} {Điều kiện}

Hoặc

Do {While | Ulti} {Điều kiện}
'Code của bạn
Loop

  • {While | Ulti}: Mặc định là Ulti, Ulti: Vòng lặp thực hiện đến khi thoả mản {Điều kiện}, While: vòng lặp thực hiện đến khi không thoả mãn {Điều kiện}
  • {Điều kiện}: Là điều kiện để thực hiện vòng lặp

VD: Vẫn lấy VD trên, nhưng ta thực hiện bằng vòng lặp Do Loop

Có nên dùng vòng for trong vba

Tương tự kết quả

Có nên dùng vòng for trong vba


Ưu điểm

  • Nếu cần vòng lặp dạng kiểm tra điều kiện thì Do Loop cho thao tác nhanh, không cần phải nhiều dòng code.

Nhược điểm

  • Dễ bị treo nếu vòng lặp không có điểm dừng
  • Khó dùng hơn For

Tổng kết
Các bạn có thể tải file demo về


Mỗi vòng lặp điều có ưu nhược điểm riêng, bạn nên cân nhắc từng trường hợp cụ thể để sử dụng cho phù hợp. Bạn có hiểu hết vòng lặp chưa?, cho mình biết bên dưới nhé.

Chỉnh sửa lần cuối: 15/09/2021