Câu lệnh If hay hàm If trong Excel vốn đã rất quen thuộc với nhiều ứng dụng. Tương tự như vậy đối với VBA Excel. Học Excel Online sẽ trình bày đầy đủ bộ hướng dẫn câu lệnh If VBA trong bài viết này
Xem nhanh
Description | Format | Example |
If Then | If [điều kiện đúng] Then [code được thực thi] End If |
If score = 100 Then Debug.Print “Perfect” End If |
If Else | If [điều kiện đúng] Then [code được thực thi] Else [code được thực thi] End If |
If score = 100 Then Debug.Print “Perfect” Else Debug.Print “Try again” End If |
If ElseIf | If [điều kiện 1 đúng] Then [code được thực thi] ElseIf [điều kiện 2 đúng] Then [code được thực thi] End If |
If score = 100 Then Debug.Print “Perfect” ElseIf score > 50 Then Debug.Print “Passed” ElseIf score <= 50 Then Debug.Print “Try again” End If |
Else and ElseIf (Else must come after ElseIf’s) |
If [condition 1 is true] Then [code được thực thi] ElseIf [condition 2 is true] Then [code được thực thi] Else [code được thực thi] End If |
If score = 100 Then Debug.Print “Perfect” ElseIf score > 50 Then Debug.Print “Passed” ElseIf score > 30 Then Debug.Print “Try again” Else Debug.Print “Yikes” End If |
If without Endif (One line only) |
If [condition is true] Then [do something] | If value <= 0 Then value = 0 |
Đoạn mã sau đây cho thấy một ví dụ đơn giản về việc sử dụng câu lệnh If VBA :
Như đã được trình bày thì Hàm If trong Excel là một hàm rất thông dụng và được ứng dụng rất nhiều. Còn đối với IF trong VBA để kiểm tra kết quả theo một hoặc nhiều điều kiện cho trước khi mã chạy.
Ví dụ: Bạn muốn biết những học sinh có điểm lớn hơn 70, bạn sẽ sử dụng câu lệnh IF để kiểm tra từng học sinh và xuất ra kết quả.
Định dạng của câu lệnh If Then như sau:
Bất cứ khi nào sử dụng câu lệnh If Then thì phải sử dụng End If phù hợp. Khi điều kiện đánh giá là true, các dòng ở giữa If then và End If sẽ được xử lý.
Để làm mã dễ đọc, thụt lề các dòng ở giữa như trên.
Thụt lề là di chuyển các dòng mã sang bên phải, giữa các câu lệnh bắt đầu và kết thúc như:
Sub… End Sub
If then… End If
If then… ElseIf… Else… Endif
For… Next
Do While… Loop
Select Case… End Case
Để thụt lề mã, đánh dấu các dòng để thụt lề và nhấn phím Tab. Nhấn Shift + Tab sẽ si chuyển sang trái. Ngoài ra có thể sử dụng biểu tượng trên thanh công cụ Visual Basic để thụt lề :
Ví dụ đơn giản If then
Đoạn mã sau xuất ra tên của tất cả học sinh có điểm trên 50 bằng tiếng Pháp.
Kết quả:
Bryan Snyder
Juanita Moody
Douglas Blair
Leah Frank
Monica Banks
Kiểm tra ví dụ này với các dấu “>” để xem kết quả thay đổi.
Đoạn giữa từ khóa If và Then được gọi là điều kiện. Một điều kiện là một câu lệnh đánh giá đúng hoặc sai. Chúng chủ yếu được sử dụng với các câu lệnh Loop và If. Khi tạo một điều kiện có thể sử dụng các ký hiệu như>, <, <>,> =, <=, =.
Ví dụ:
Điều kiện | Điều này đúng khi |
x <5 | x nhỏ hơn 5 |
x <= 5 | x nhỏ hơn hoặc bằng 5 |
x> 5 | x lớn hơn 5 |
x> = 5 | x lớn hơn hoặc bằng 5 |
x = 5 | x bằng 5 |
x <> 5 | x không bằng 5 |
x> 5 And x <10 | x lớn hơn 5 VÀ x nhỏ hơn 10 |
x = 2 Or x> 10 | x bằng 2 HOẶC x lớn hơn 10 |
Vùng dữ liệu (“A1”) = “John” | Ô A1 chứa văn bản “John” |
Vùng dữ liệu (“A1”) <> “John” | Ô A1 không chứa văn bản “John” |
Bạn có thể nhận thấy x = 5 như một điều kiện và đừng nhầm lẫn điều này với x = 5 khi được sử dụng như một phép gán.
Sự khác biệt giữa dấu “=” trong phép gán và điều kiện:
Sử dụng “=” | Loại câu lệnh | Ý nghĩa |
Loop Until x = 5 | Condition | X có bằng 5 không |
Do While x = 5 | Condition | X có bằng 5 không |
If x = 5 Then | Condition | X có bằng 5 không |
For x = 1 To 5 | Assignment | Đặt giá trị của x thành 1, sau đó thành 2, v.v. |
x = 5 | Assignment | Đặt giá trị của x thành 5 |
b = 6 = 5 | Assignment and Condition | Gán b cho kết quả của điều kiện 6 = 5 |
x = MyFunc(5,6) | Assignment | Gán x cho giá trị trả về từ hàm |
Mục cuối của bảng hiển thị một câu lệnh có hai dấu “=”, dấu đầu tiên là phép hán và dấu còn lại là điều kiện.
Bất kỳ câu lệnh nào cũng bắt đầu với một biến và dấu bằng phía sau :
[variable] [=] [evaluate this part]
Bất kỳ điều gì bên phải dấu bằng sẽ được đánh giá và kết quả sẽ đặt vào biến bên trái. Ví dụ:
[x] [=] [5]
[b] [=] [6 = 5]
[x] [=] [MyFunc (5,6)]
Câu lệnh ElseIf cho phép chọn lọc từ nhiều tùy chọn khác nhau. Trong ví dụ sau, chúng ta in cho các nhãn hiệu nằm trong vùng dữ liệu Distinction hoặc High Distinction.
Thứ tự rất quan trọng. Điều kiện được kiểm tra trước.
Hoán đổi giữa If và ElseIf t thì mã như sau:
Trước tiên kiểm tra giá trị lớn hơn 75. Giá trị High Distinction sẽ không được in ra bởi vì nếu một giá trị lớn hơn 85 thì sẽ không khớp với câu lệnh IF.
Để tránh những vấn đề này nên sử dụng hai điều kiện và 2 câu lệnh loại bỏ sự nhầm lẫn. Ví dụ dưới đây cho thấy cách sử dụng chúng.
Dựa trên ví dụ này bạn có thể sử dụng bao nhiêu câu lệnh ElseIF tùy thích.
Câu lệnh Else được sử dụng với ý nghĩa như “nếu không có điều kiện nào đúng” hoặc “Mọi thứ khác”. Trong ví dụ truocs không có câu lệnh để in các dòng mã bị lỗi, chúng ta có thể thêm điều này bằng cách sử dụng lệnh Else:
Tiếp theo viết mã đi qua các dữ liệu mẫu và xuất ra học sinh và phân loại chúng (classification).
Kết quả
Như các bạn đã biết về các hàm logic trong Excel thì hôm nay Học Excel Online sẽ hướng dẫn sử dụng các toán tử logic với câu lệnh If VBA
Có thể có nhiều hơn một điều kiện trong câu lệnh IF VBA nếu sử dụng các từ khóa AND hoặc OR. Nó hoạt động tương tự nhưng sử dụng trong tiếng Anh.
Xem lại dữ liệu mẫu .Bây giờ chúng ta muốn in tất cả các học sinh đạt trên 50 đến 80 điểm. Sử dụng AND để thêm một điều kiện bổ sung. Đoạn mã có nội dung: nếu mark >=50 VÀ nhỏ hơn 75 thì in tên học sinh.
Kết quả:
Douglas Blair
Leah Frank
Monica Banks
Trong ví dụ tiếp theo, chúng ta muốn những học sinh đã học Lịch sử (History) hoặc Tiếng Pháp (France). Vì vậy, trong trường hợp này như sau: nếu học sinh học Lịch sử HOẶC nếu học sinh học tiếng Pháp:
Kết quả
Bryan History
Bradford French
Douglas History
Ken French
Leah French
Rosalie History
Jackie History
AND hoạt động như sau:
Condition 1 | Condition 2 | Result |
TRUE | TRUE | TRUE |
TRUE | FALSE | FALSE |
FALSE | TRUE | FALSE |
FALSE | FALSE | FALSE |
Có thể thấy AND chỉ đúng khi tất cả các điều kiện đều đúng
Condition 1 | Condition 2 | Result |
TRUE | TRUE | TRUE |
TRUE | FALSE | TRUE |
FALSE | TRUE | TRUE |
FALSE | FALSE | FALSE |
Nhận thấy là OR chỉ sai khi tất cả các điều kiện đều sai.
Kết hợp AND và OR với nhau có thể làm cho mã khó đọc và dẫn đến lỗi. Sử dụng dấu ngoặc đơn có thể làm cho các điều kiện rõ ràng hơn.
Ngoài ra còn có một toán tử NOT. Điều này trả về kết quả ngược lại với điều kiện.
Condition | Result |
TRUE | FALSE |
FALSE | TRUE |
Tương đương với hai dòng mã sau đây:
Và
Đặt điều kiện trong ngoặc đơn làm cho mã dễ đọc hơn:
Cách sử dụng phổ biến của Not là kiểm tra xem đối tượng đã được thiết lập hay chưa. Lấy worksheet làm ví dụ:
Chúng ta sẽ kiểm tra mySheet là hợp lệ trước khi sử dụng nó. Chúng tôi có thể kiểm tra như sau:
Sử dụng Not with Nothing:
Nếu hơi khó hiểu, có thể sử dụng dấu ngoặc đơn như thế này:
VBA có một hàm tương tự như hàm If trong Excel. Trong Excel, bạn sẽ thường sử dụng hàm If như sau:
= IF (F2 = ””, ””, F1 / F2)
Định dạng là:
=If(condition, action if true, action if false).
VBA có câu lệnh IIF hoạt động theo cách tương tự.
Hãy xem một ví dụ. Trong đoạn mã sau, sử dụng IIF để kiểm tra giá trị của biến val. Nếu giá trị lớn hơn 10, chúng ta in true nếu không, chúng ta in false:
Trong ví dụ tiếp theo, chúng tôi muốn in ra Pass hoặc Fail bên cạnh mỗi học sinh tùy thuộc vào. Trong đoạn mã đầu tiên, chúng tôi sẽ sử dụng câu lệnh VBA If bình thường để thực hiện việc này:
Trong đoạn mã tiếp theo, chúng ta sẽ sử dụng hàm IIF. Có thể thấy rằng mã gọn gàng hơn :
Bạn cũng có thể lồng các câu lệnh IIF như trong Excel. Bây giờ chúng tôi muốn in Distinction Pass hoặc Fail cho mỗi học sinh.
Sử dụng VBA bình thường:
Sử dụng IIF lồng nhau:
Sử dụng IIF lồng nhau là hữu ích trong những trường hợp đơn giản như thế này. Mã này dễ đọc và do đó không có khả năng xảy ra lỗi.
Những điều cần chú ý
Điều quan trọng cần hiểu là hàm IIF luôn đánh giá cả phần Đúng và Sai của câu lệnh bất kể điều kiện là gì.
Trong ví dụ sau, chúng ta muốn chia cho các marks khi nó không bằng 0. Nếu nó bằng 0, chúng ta muốn trả về 0.
Tuy nhiên, khi marks bằng 0, mã sẽ đưa ra lỗi “Divide by 0”. Điều này là do nó đánh giá cả câu lệnh True và False. Câu lệnh False ở đây tức là (60 / Marks) đánh giá là có lỗi vì marks bằng 0.
Nếu chúng ta sử dụng câu lệnh IF thông thường:
Điều này có nghĩa nếu có các hàm True và False thì cả hai sẽ được thực thi. Vì vậy IIF sẽ chạy cả hai hàm mặc dù chỉ có một giá trị trả về. Ví dụ:
IIF ngắn gọn hơn so với IF. Tuy nhiên, nếu các điều kiện trở nên phức tạp, bạn nên sử dụng câu lệnh If bình thường. Một nhược điểm của IIF là nó không được nhiều người biết đến.
Cũng như chúng ta đã thảo luận trong phần trước, IIF luôn đánh giá phần True và False vì vậy nếu bạn đang xử lý nhiều dữ liệu thì câu lệnh IF sẽ nhanh hơn. Quy tắc chung sử dụng IIF khi nó sẽ dễ đọc và không yêu cầu các lệnh gọi hàm. Đối với các trường hợp phức tạp hơn, hãy sử dụng câu lệnh If thông thường.
Câu lệnh Select Case là một cách thay thế If với nhiều ElseIf’s. Câu lệnh này được sử dụng phổ biến trong hầu hết các ngôn ngữ lập trình được gọi là câu lệnh Switch. Ví dụ Java, C #, C ++ và Javascript đều có câu lệnh switch.
Định dạng
Ví dụ AddClass ở trên và viết lại bằng cách sử dụng câu lệnh Select Case.
Đây mã tương tự sử dụng câu lệnh Select case. Bạn sẽ nhận thấy là chúng tôi sử dụng “Case 85 to 100” rather than” thay vì “dấu> = 85 Và dấu <= 100”.
Có thể viết lại câu lệnh select theo định dạng giống như ElseIf ban đầu, sử dụng Is with Case.
Bạn có thể sử dụng Is để kiểm tra nhiều giá trị. Trong đoạn mã sau, chúng tôi đang kiểm tra xem các dấu bằng 5, 7 hoặc 9.
Bài hướng dẫn câu lệnh If VBA hoàn chỉnh của Học Excel Online đã thỏa mãn các bạn chưa? Hãy cmt xuống phía dưới những thắc mắc của bạn để được giải đáp ngay lập tức, không chỉ về bài viết này mà cả những nội dung liên quan đến VBA Excel. Xin chào và hẹn gặp lại!