Excel VBA: Các mệnh đề điều khiển

Tiếp tục chủ đề ở phần trước, bài này tôi xin giới thiệu tới các bạn về các mệnh đề điều khiển trong VBA

Mệnh đề if-else

Đây là mệnh đề khá phổ biến trong Excel VBA để thực hiện các đoạn code nếu nó thỏa mãn điều kiện cụ thể nào đó. Nó kiểm tra giá trị dạng boolean của điều kiện. Nếu giá trị điều kiện là True thì chỉ có khối lệnh sau if sẽ được thực hiện, nếu là False thì chỉ có khối lệnh sau else được thực hiện.

Cú pháp:

If (condition) Then
    ' khối lệnh này được thực thi 
    ' nếu condition là true 
Else
    ' khối lệnh này được thực thi
    ' nếu condition = false
End If

Các toán tử được sử dụng trong mệnh đề if-else: = bằng

        > Lớn hơn

        < nhỏ hơn

        >= Lớn hơn hoặc bằng

        <= Nhỏ hơn hoặc bằng

        <> khác

Logic

        And:   Và

        or:  Hoặc

        Xor:  cả 2 đúng hoặc sai là đúng

        Not: phủ định

Ví dụ 1: Tính Pass, Fail bài report tháng dựa vào % hoàn thành của bài report. Nếu >=60% thì bài report đó Pass, và ngược lại là Fail. Bằng cách sử dụng mệnh đề if- else thì ta có kết quả sau:

Vòng lặp for

Vòng lặp là 1 cấu trúc chương trình cho phép 1 câu lệnh hoặc 1 nhóm câu lệnh thực hiện 1 số lần có giới hạn. Giới hạn này có thể biết trước và có thể không, nhưng phải có để máy tính ngừng lại khi đủ số lần lặp ấn định trước. Giới hạn này có thể xác định bằng 1 con số cụ thể, 1 con số là kết quả của 1 phép tính, và cũng có thể là 1 điều kiện thoát ra khỏi vòng lặp.

Nếu số lần lặp là cố định thì vòng lặp for được khuyến khích sử dụng, còn nếu số lần lặp không cố định thì nên sử dụng vòng lặp while hoặc do while.

Cú pháp vòng lặp for:

For  counter = start To end [Step stepcount]
   [statement 1]
   [statement 2]
   ....
   [statement 10]
   [Exit For]
   [statement 11]
   [statement 22]
   ....
   [statement n]
Next

Trong đó:

[Step stepcount] là tùy chọn, nó rất hữu ích khi đếm lùi, đếm nhiều đơn vị một vòng lặp. Hãy xem các ví dụ dưới đây để hiểu các trường hợp sử dụng vòng lặp for trong VBA.

Ví dụ 2: Tiếp tự bài toán ở ví dụ 1, lần yêu cầu bài toán đưa ra đó là tính Pass/Fail bài report của list 15 nhân viên. Kết hợp sử dụng mệnh đề if - else và vòng lặp for ta có kết quả như sau:

Vòng lặp Do-While

Công việc nhập lặp đi lặp lại do vậy ta cần sử dụng vòng lặp. Nếu số lần lặp là không xác định nên không thể sử dụng vòng lặp For, nhưng nếu việc kiểm tra được tiến hành sau or trước khi thực hiện thì ta sẽ sử dụng vòng lặp Do ... While.

Cú pháp: Kiểm tra điều kiện ở đầu vòng lặp

Do While condition
   [statement 1]
   [statement 2]
   ...
   [statement l]
   [Exit Do]
   [statement m]
   ...
   [statement n]
Loop

Ví dụ 3: Cũng yêu cầu bài toán nhưng ở ví dụ 2 ta cũng có thể sử dụng vòng lặp do-while để giải quyết vấn đề với cú pháp kiểm tra điều kiện ở đàu vòng lặp.

Cú pháp: Kiểm tra điều kiện ở cuối vòng lặp

Do
   [statement 1]
   [statement 2]
   ...
   [statement l]
   [Exit Do]
   [statement m]
   ...
   [statement n]
Loop While condition

Ví dụ 4: Sử dụng vòng lặp do-while để giải quyết vấn đề với cú pháp kiểm tra điều kiện ở cuối vòng lặp.

Mệnh đề Select-Case

Mệnh đề Select-Case trong VBA được sử dụng để thực thi 1 hoặc nhiều khối lệnh từ nhiều điều kiện.

Khi một người dùng muốn thực hiện một nhóm các câu lệnh tùy thuộc vào một giá trị của một biểu thức, thì Select-Case sẽ được sử dụng. Mỗi giá trị được gọi là Case. Câu lệnh Case Else được thực thi nếu biểu thức kiểm tra không khớp với bất kỳ trường hợp nào được chỉ định bởi người dùng.

Case Else là một câu lệnh tùy chọn trong mệnh đề Select-Case, tuy nhiên, nó là tốt hơn khi luôn luôn có một câu lệnh Case Else.

Cú pháp:

Select Case expression
   Case expressionlist1
      statement1
      statement2
      ....
   Case expressionlist2
      statement1
      statement2
      ....
   Case expressionlistn
      statement1
      statement2
      ....
   Case Else
      elsestatement1
      elsestatement2
      ....
End Select

Ví dụ 5: Tiếp tục với ví dụ 4, bài toán đưa ra đó là cần phải phân loại các bài report dựa trên % hoàn thành. Kết hợp sử dụng vòng lặp do ... while và mệnh đề select- case ta có kết quả như sau:


All Rights Reserved