VBA If, ElseIf, Else (Hướng dẫn cơ bản về câu lệnh If)

VBA If Statement

Nếu thì

VBA If Statements cho phép bạn kiểm tra xem biểu thức là TRUE hay FALSE, chạy mã khác nhau dựa trên kết quả.Hãy xem một ví dụ đơn giản:
1 Nếu Phạm vi ("a2"). Giá trị> 0 Thì Phạm vi ("b2"). Giá trị = "Tích cực"
Điều này kiểm tra xem giá trị trong Dải A2 có lớn hơn 0. Nếu vậy, hãy đặt Phạm vi B2 bằng “Tích cực”Lưu ý: Khi kiểm tra các điều kiện, chúng ta sẽ sử dụng các toán tử so sánh =,>, <, =. Chúng tôi sẽ thảo luận chi tiết hơn về chúng trong phần sau của bài viết.Đây là cú pháp cho câu lệnh If một dòng đơn giản:
1 Nếu [test_expression] thì [action]
Để dễ đọc hơn, bạn có thể sử dụng ký tự Tiếp tục dòng (gạch dưới) để mở rộng Câu lệnh If thành hai dòng (như chúng ta đã làm trong hình trên):
12 Nếu [test_expression] thì _[hoạt động]
12 Nếu Phạm vi ("a2"). Giá trị> 0 Thì _Phạm vi ("b2"). Giá trị = "Tích cực"

Kết thúc nếu

Câu lệnh if "một dòng" ở trên hoạt động tốt khi bạn đang kiểm tra một điều kiện. Nhưng khi Câu lệnh IF của bạn trở nên phức tạp hơn với nhiều điều kiện, bạn sẽ cần thêm “End If” vào cuối câu lệnh if:
123 Nếu Phạm vi ("a2"). Giá trị> 0 ThìPhạm vi ("b2"). Giá trị = "Tích cực"Kết thúc nếu

Đây là cú pháp:

123 Nếu [test_expression] thì[hoạt động]Kết thúc nếu

End If biểu thị sự kết thúc của câu lệnh if.

Bây giờ, hãy thêm ElseIF:

ElseIF - Nhiều điều kiện

ElseIf được thêm vào câu lệnh If hiện có. Khác Nếu kiểm tra nếu một điều kiện được đáp ứng CHỈ nếu các điều kiện trước đó chưa được đáp ứng.Trong ví dụ trước, chúng tôi đã kiểm tra xem giá trị ô có dương hay không. Bây giờ chúng tôi cũng sẽ kiểm tra xem giá trị ô có âm hay không bằng ElseIf:
12345 Nếu Phạm vi ("a2"). Giá trị> 0 ThìPhạm vi ("b2"). Giá trị = "Tích cực"ElseIf Range ("a2"). Giá trị <0 ThìPhạm vi ("b2"). Giá trị = "Âm"Kết thúc nếu

Bạn có thể sử dụng nhiều ElseIfs để kiểm tra nhiều điều kiện:

1234567891011 Sub If_Multiple_Conditions ()Nếu Phạm vi ("a2"). Giá trị = "Mèo" ThìPhạm vi ("b2"). Giá trị = "Meo meo"ElseIf Range ("a2"). Value = "Dog" Sau đóPhạm vi ("b2"). Giá trị = "Gâu"ElseIf Range ("a2"). Value = "Duck" Sau đóPhạm vi ("b2"). Giá trị = "Quack"Kết thúc nếuKết thúc Sub

Bây giờ chúng ta sẽ thêm một Khác:

Khác

Các Khác sẽ chạy nếu không có điều kiện nào khác trước đó đã được đáp ứng.

Chúng tôi sẽ kết thúc ví dụ của mình bằng cách sử dụng Else để chỉ ra rằng nếu giá trị ô không phải là dương hoặc âm, thì nó phải bằng 0:

1234567 Nếu Phạm vi ("a2"). Giá trị> 0 ThìPhạm vi ("b2"). Giá trị = "Tích cực"ElseIf Range ("a2"). Giá trị <0 ThìPhạm vi ("b2"). Giá trị = "Âm"KhácPhạm vi ("b2"). Giá trị = "Không"Kết thúc nếu

Nếu khác

Loại câu lệnh If phổ biến nhất là một If-Else đơn giản:

1234567 Sub If_Else ()Nếu Phạm vi ("a2"). Giá trị> 0 ThìPhạm vi ("b2"). Giá trị = "Tích cực"KhácPhạm vi ("b2"). Giá trị = "Không Dương"Kết thúc nếuKết thúc Sub

IF lồng nhau

Bạn cũng có thể "lồng" các câu lệnh if bên trong nhau.

1234567891011 Sub Nested_Ifs ()Nếu Phạm vi ("a2"). Giá trị> 0 ThìPhạm vi ("b2"). Giá trị = "Tích cực"KhácNếu Phạm vi ("a2"). Giá trị <0 ThìPhạm vi ("b2"). Giá trị = "Âm"KhácPhạm vi ("b2"). Giá trị = "Không"Kết thúc nếuKết thúc nếuKết thúc Sub

IF - Hoặc, Và, Xor, Không

Tiếp theo chúng ta sẽ thảo luận về các toán tử logic: Hoặc, Và, Xor, Không.

Tôi cho

Các Hoặc kiểm tra nhà điều hành nếu ít nhất một điều kiện được đáp ứng.

Đoạn mã sau sẽ kiểm tra xem giá trị trong Phạm vi A2 nhỏ hơn 5.000 hoặc lớn hơn 10.000:

123 Nếu Phạm vi ("a2"). Giá trị 10000 ThìPhạm vi ("b2"). Giá trị = "Ngoài phạm vi"Kết thúc nếu

Bạn có thể bao gồm nhiều Ors trong một dòng:

123 Nếu Phạm vi ("a2"). Giá trị 10000 Hoặc Phạm vi ("a2"). Giá trị = 9999 ThìPhạm vi ("b2"). Giá trị = "Ngoài phạm vi"Kết thúc nếu

Nếu bạn định sử dụng nhiều Ors, bạn nên sử dụng ký tự tiếp nối dòng để làm cho mã của bạn dễ đọc hơn:

123456 Nếu Phạm vi ("a2"). Giá trị <5000 Hoặc _Phạm vi ("a2"). Giá trị> 10000 Hoặc _Range ("a2"). Giá trị = 9999 Sau đóPhạm vi ("b2"). Giá trị = "Ngoài phạm vi"Kết thúc nếu

Nếu Và

Toán tử And cho phép bạn kiểm tra xem TẤT CẢ các điều kiện đều được đáp ứng.

123 Nếu Phạm vi ("a2"). Giá trị> = 5000 Và Phạm vi ("a2"). Giá trị <= 10000 ThìPhạm vi ("b2"). Giá trị = "Trong phạm vi"Kết thúc nếu

Nếu Xor

Toán tử Xor cho phép bạn kiểm tra xem chính xác một điều kiện được đáp ứng. Nếu không đáp ứng điều kiện Xor sẽ trả về FALSE, Nếu hai hoặc nhiều điều kiện được đáp ứng, Xor cũng sẽ trả về false.

Tôi hiếm khi thấy Xor được sử dụng trong lập trình VBA.

Nếu không

Toán tử Not được sử dụng để chuyển FALSE thành TRUE hoặc TRUE thành FALSE:

123 Sub IF_Not ()MsgBox Không (Đúng)Kết thúc Sub

Lưu ý rằng toán tử Not yêu cầu dấu ngoặc bao quanh biểu thức để chuyển đổi.

Toán tử Not cũng có thể được áp dụng cho câu lệnh If:

123 Nếu Không (Phạm vi ("a2"). Giá trị> = 5000 Và Phạm vi ("a2"). Giá trị <= 10000) Sau đóPhạm vi ("b2"). Giá trị = "Ngoài phạm vi"Kết thúc nếu

Nếu so sánh

Khi so sánh, bạn thường sẽ sử dụng một trong các toán tử so sánh:

Toán tử so sánh Giải trình
= Tương đương với
Không bằng
> Lớn hơn
>= Lớn hơn hoặc bằng
< Ít hơn
<= Ít hơn hoặc bằng

Tuy nhiên, bạn cũng có thể sử dụng bất kỳ biểu thức nào hoặc chức năng kết quả là TRUE hoặc FALSE

If - Hàm Boolean

Khi xây dựng biểu thức cho Câu lệnh If, bạn cũng có thể sử dụng bất kỳ hàm nào tạo ra TRUE hoặc False. VBA có một số chức năng sau:

Hàm số Sự miêu tả
IsDate Trả về TRUE nếu biểu thức là một ngày hợp lệ
IsEmpty Kiểm tra các ô trống hoặc các biến không xác định
IsError Kiểm tra các giá trị lỗi
IsNull Kiểm tra giá trị NULL
IsNumeric Kiểm tra giá trị số

Chúng có thể được gọi như thế này:

1 Nếu IsEmpty (Phạm vi ("A1"). Giá trị) Thì MsgBox "Ô trống"

Excel cũng có nhiều hàm bổ sung có thể được gọi bằng WorksheetFunction. Dưới đây là một ví dụ về Hàm IsText trong Excel:

12 If Application.WorksheetFunction.IsText (Range ("a2"). Giá trị) Thì _MsgBox "Ô là Văn bản"

Bạn cũng có thể tạo các Chức năng do Người dùng Xác định (UDF) của riêng mình. Dưới đây chúng ta sẽ tạo một hàm Boolean đơn giản trả về TRUE. Sau đó, chúng tôi sẽ gọi hàm đó trong câu lệnh If của chúng tôi:

1234567891011 Sub If_Function ()Nếu TrueFunction thìMsgBox "Đúng"Kết thúc nếuKết thúc SubHàm TrueFunction () As BooleanTrueFunction = ĐúngChức năng kết thúc

So sánh văn bản

Bạn cũng có thể so sánh văn bản tương tự như so sánh số:
1 Msgbox "a" = "b"
1 Msgbox "a" = "a"
Khi so sánh văn bản, bạn phải lưu ý đến "Case" (chữ hoa hoặc chữ thường). Theo mặc định, VBA coi các chữ cái có các trường hợp khác nhau là không khớp. Nói cách khác, “A” “a”.Nếu bạn muốn VBA bỏ qua trường hợp, bạn phải thêm khai báo Văn bản So sánh Tùy chọn vào đầu mô-đun của mình:
1 Tùy chọn So sánh Văn bản

Sau khi khai báo “A” = “a”:
12345 Tùy chọn So sánh Văn bảnSub If_Text ()MsgBox "a" = "A"Kết thúc Sub

VBA nếu thích

VBA Like Operator cho phép bạn thực hiện các so sánh không chính xác của văn bản. Nhấp vào liên kết “Nhà điều hành thích” để tìm hiểu thêm, nhưng chúng tôi sẽ hiển thị một ví dụ cơ bản bên dưới:

12345678 Dim strName dưới dạng chuỗistrName = "Ông Charles"Nếu strName Like "Mr *" thìMsgBox "Đúng"KhácMsgBox "Sai"Kết thúc nếu

Ở đây chúng tôi đang sử dụng ký tự đại diện dấu hoa thị “*”. Dấu * là viết tắt của bất kỳ số ký tự nào. Vì vậy câu lệnh If ở trên sẽ trả về TRUE. Toán tử Like là một công cụ cực kỳ mạnh mẽ, nhưng thường ít được sử dụng để xử lý văn bản.

Nếu vòng lặp

Vòng lặp VBA cho phép bạn lặp lại các hành động. Kết hợp IF-ELSE với các vòng lặp là một cách tuyệt vời để xử lý nhanh nhiều phép tính.

Tiếp tục với ví dụ Tích cực / Phủ định của chúng tôi, chúng tôi sẽ thêm Vòng lặp Cho Mỗi để lặp qua một phạm vi ô:

1234567891011121314 Sub If_Loop ()Làm mờ ô dưới dạng phạm viĐối với mỗi ô trong phạm vi ("A2: A6")Nếu Cell.Value> 0 ThìCell.Offset (0, 1) .Value = "Tích cực"ElseIf Cell.Value <0 Sau đóCell.Offset (0, 1) .Value = "Phủ định"KhácCell.Offset (0, 1) .Value = "Zero"Kết thúc nếuÔ tiếp theoKết thúc Sub

Nếu ví dụ khác

Bây giờ chúng ta sẽ đi qua một số ví dụ cụ thể hơn.

Kiểm tra xem ô trống không

Mã này sẽ kiểm tra xem một ô trống hay không. Nếu nó trống, nó sẽ bỏ qua ô. Nếu nó không trống, nó sẽ xuất giá trị ô sang ô bên phải:
1234567 Sub If_Cell_Empty ()Nếu Phạm vi ("a2"). Giá trị "" ThìPhạm vi ("b2"). Giá trị = Phạm vi ("a2"). Giá trịKết thúc nếuKết thúc Sub

Kiểm tra xem ô có chứa văn bản cụ thể không

Chức năng hướng dẫn kiểm tra nếu một chuỗi văn bản được tìm thấy trong một chuỗi khác. Sử dụng nó với câu lệnh If để kiểm tra xem một ô có chứa văn bản cụ thể hay không:
123 Nếu hướng dẫn (Phạm vi ("A2"). Giá trị, "văn bản")> 0 ThìMsgbox "Đã tìm thấy văn bản"Kết thúc nếu

Kiểm tra xem ô có chứa văn bản không

Mã này sẽ kiểm tra xem một ô có phải là văn bản hay không:
1234567 Sub If_Cell_Is_Text ()Nếu Application.WorksheetFunction.IsText (Phạm vi ("a2"). Giá trị) ThìMsgBox "Ô là Văn bản"Kết thúc nếuKết thúc Sub

Nếu Goto

Bạn có thể sử dụng kết quả của câu lệnh If để “Chuyển đến” một phần mã khác.
12345678910 Sub IfGoTo ()If IsError (Cell.value) ThìGoto Bỏ quaKết thúc nếu'Một số mãNhảy:Kết thúc Sub

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

Sử dụng Ifs và vòng lặp, bạn có thể kiểm tra xem một ô trống và nếu có thì xóa toàn bộ hàng.
123456789 Sub DeleteRowIfCellBlank ()Làm mờ ô dưới dạng phạm viĐối với mỗi ô trong phạm vi ("A2: A10")If Cell.Value = "" Then Cell.EntireRow.DeleteÔ tiếp theoKết thúc Sub

Nếu MessageBox Có / Không

Với Hộp thư VBA, bạn có thể yêu cầu người dùng chọn từ một số tùy chọn. Hộp Thông báo Có / Không yêu cầu người dùng chọn Có hoặc Không. Bạn có thể thêm Hộp Thông báo Có / Không vào quy trình để hỏi người dùng xem họ có muốn tiếp tục chạy quy trình hay không. Bạn xử lý thông tin nhập của người dùng bằng câu lệnh If.Đây là Hộp thông báo Có / Không trong thực tế:
123456789101112 Sub MsgBoxVariable ()Dim câu trả lời dưới dạng số nguyênanswer = MsgBox ("Bạn có muốn tiếp tục không?", vbQuestion + vbYesNo)Nếu answer = vbYes thìMsgBox "Có"KhácMsgBox "Không"Kết thúc nếuKết thúc Sub

VBA If, ElseIf, Else trong Access VBA

Các hàm If, ElseIf và Else hoạt động giống hệt nhau trong Access VBA như trong Excel VBA.

Bạn có thể sử dụng câu lệnh If để kiểm tra xem có các bản ghi trong Tập bản ghi hay không.

wave wave wave wave wave