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ố:
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.
