VBA logic Operators: AND, OR, NOT, IF NOT trong Excel VBA
⚡ Tóm tắt thông minh
VBA logic OperaCác toán tử AND kết hợp nhiều điều kiện thành một kết quả Đúng hoặc Sai duy nhất. Trang này giải thích các toán tử AND, OR và NOT với các ví dụ lệnh có thể chạy được, bảng chân lý đầy đủ và các toán tử ít được biết đến hơn như Xor, Eqv và Imp.

Excel VBA logic Operaxoắn
Giả sử bạn muốn xử lý đơn đặt hàng của khách hàng. Để làm được điều đó, trước tiên bạn muốn kiểm tra xem sản phẩm đã đặt hàng có tồn tại hay không. Nếu có, bạn cũng muốn kiểm tra xem số lượng trong tay có đủ hay không. Toán tử logic có ích trong những trường hợp như vậy. Toán tử logic được sử dụng để đánh giá nhiều điều kiện.
Mỗi điều kiện riêng lẻ được cấu thành từ... Toán tử so sánh và trả về True hoặc False. Sau đó, một toán tử logic sẽ kết hợp các kết quả đó thành một kết quả cuối cùng.
Các toán tử logic VBA Excel chính AND, OR, NOT được liệt kê trong bảng bên dưới:
| S / N | Operator | Mô tả Chi tiết | Ví dụ | Đầu ra |
|---|---|---|---|---|
| 1 | VÀ | VÀ: Điều này được sử dụng để kết hợp nhiều hơn một điều kiện. Nếu tất cả các điều kiện đều đúng, AND đánh giá là đúng. Nếu bất kỳ điều kiện nào là sai, AND đánh giá là sai | Nếu (1 = 1) Và (0 = 1) Thì | sai |
| 2 | OR | HOẶC: Điều này được sử dụng để kết hợp nhiều điều kiện. Nếu bất kỳ điều kiện nào được đánh giá là đúng, OR trả về true. Nếu tất cả đều sai, HOẶC trả về sai | Nếu (1 = 1) Hoặc (5 = 0) Thì | đúng |
| 3 | KHÔNG | KHÔNG: Cái này hoạt động giống như một hàm nghịch đảo. Nếu điều kiện đúng thì trả về sai, nếu điều kiện sai thì trả về đúng. | Nếu không (0 = 0) thì | sai |
Ba mô tả trên sẽ dễ nhớ hơn nếu được xem như một bảng tổng hợp các thông tin đầu vào và kết quả.
Bảng chân lý cho logic VBA Operaxoắn
Bảng chân lý liệt kê mọi tổ hợp đầu vào và kết quả mà mỗi toán tử trả về. Chỉ cần đọc bảng này một lần là đủ để loại bỏ phỏng đoán khỏi bất kỳ điều kiện nào bạn viết sau này.
| Điều kiện A | Điều kiện B | A và B | A hoặc B | Không phải A |
|---|---|---|---|---|
| Thật | Thật | Thật | Thật | Sai |
| Thật | Sai | Sai | Thật | Sai |
| Sai | Thật | Sai | Thật | Thật |
| Sai | Sai | Sai | Sai | Thật |
Có hai mẫu hình đáng để ghi nhớ. VÀ Chỉ trả về giá trị True trên một hàng trong bốn hàng, do đó nó thu hẹp phạm vi lựa chọn. OR Chỉ trả về giá trị False trên một hàng duy nhất, do đó nó mở rộng thêm một hàng. KHÔNG Nó chỉ nhận một điều kiện thay vì hai điều kiện, đó là lý do tại sao nó có một cột riêng.
VBA logic OperaVí dụ về nguồn Code
Để đơn giản, chúng ta sẽ so sánh các số được mã hóa cứng.
Thêm các nút ActiveX vào trang tính từ tùy chọn “Chèn”.
Đặt thuộc tính như trong hình bên dưới

Bảng sau đây hiển thị các thuộc tính bạn cần thay đổi và các giá trị bạn cần cập nhật.
| S / N | Kiểm soát | Bất động sản | Giá trị |
|---|---|---|---|
| 1 | LệnhNút1 | Họ tên | btnAND |
| Chú thích | VÀ Operacho (1 = 1) Và (0 = 0) | ||
| 2 | LệnhNút2 | Họ tên | btnOR |
| Chú thích | OR Operator (1 = 1) Hoặc (5 = 0) | ||
| 3 | LệnhNút3 | Họ tên | btnKHÔNG |
| Chú thích | KHÔNG OperaKhông phải (0 = 0) |
Thêm mã sau vào btnAND_Click
Private Sub btnAND_Click() If (1 = 1) And (0 = 0) Then MsgBox "AND evaluated to TRUE", vbOKOnly, "AND operator" Else MsgBox "AND evaluated to FALSE", vbOKOnly, "AND operator" End If End Sub
VBA Nếu VÀ Operator
- “Nếu (1 = 1) Và (0 = 0) Thì” câu lệnh if sử dụng toán tử logic AND để kết hợp hai điều kiện (1 = 1) Và (0 = 0). Nếu cả hai điều kiện đều đúng, đoạn mã phía trên từ khóa 'Khác' sẽ được thực thi. Nếu cả hai điều kiện đều không đúng, mã bên dưới từ khóa 'Khác' sẽ được thực thi.
Cả hai điều kiện đều đúng ở đây, vì vậy khi nhấn nút sẽ hiển thị "AND được đánh giá là TRUE".
Thêm mã sau vào btnOR_Click
Private Sub btnOR_Click() If (1 = 1) Or (5 = 0) Then MsgBox "OR evaluated to TRUE", vbOKOnly, "OR operator" Else MsgBox "OR evaluated to FALSE", vbOKOnly, "OR operator" End If End Sub
VBA Nếu HOẶC Operator
- “Nếu (1 = 1) Hoặc (5 = 0) Thì” Câu lệnh if sử dụng toán tử logic OR để kết hợp hai điều kiện (1 = 1) hoặc (5 = 0). Nếu bất kỳ điều kiện nào đúng, đoạn mã phía trên từ khóa Else sẽ được thực thi. Nếu cả hai điều kiện đều sai, đoạn mã phía dưới từ khóa Else sẽ được thực thi.
Điều kiện đầu tiên đúng và điều kiện thứ hai sai, vì vậy phép toán OR vẫn trả về true và thông báo hiển thị là “OR được đánh giá là TRUE”.
Thêm mã sau vào btnNOT_Click
Private Sub btnNOT_Click() If Not (0 = 0) Then MsgBox "NOT evaluated to TRUE", vbOKOnly, "NOT operator" Else MsgBox "NOT evaluated to FALSE", vbOKOnly, "NOT operator" End If End Sub
VBA Nếu KHÔNG Operator
- “Nếu không (0 = 0) thì” Hàm `if Not` trong VBA sử dụng toán tử logic `NOT` để phủ định kết quả của điều kiện trong câu lệnh `if`. Điều kiện bên trong (0 = 0) là đúng, vì vậy `NOT` biến nó thành sai và đoạn mã bên dưới từ khóa `Else` sẽ được thực thi. Nếu điều kiện bên trong là sai, `NOT` sẽ biến nó thành đúng và đoạn mã phía trên `Else` sẽ được chạy thay thế.
Ba nút này mỗi nút kiểm tra một giá trị cố định. Các điều kiện thực tế được đọc từ bảng tính và kết hợp cả hai nhóm toán tử.
Cách kết hợp tư duy logic và phép so sánh Operaxoắn
Macro sản xuất hiếm khi kiểm tra một con số được mã hóa cứng. Nó đọc một giá trị, so sánh giá trị đó và kết hợp một số phép so sánh đó thành một quyết định duy nhất. Macro bên dưới chỉ phê duyệt đơn đặt hàng khi sản phẩm tồn tại, số lượng đủ và tài khoản khách hàng không bị tạm khóa.
Sub ApproveOrder() Dim QtyOnHand As Long Dim QtyOrdered As Long Dim OnHold As Boolean QtyOnHand = Sheet1.Range("B2").Value QtyOrdered = Sheet1.Range("B3").Value OnHold = Sheet1.Range("B4").Value ' All three parts must hold for the order to pass If (QtyOrdered > 0) And (QtyOnHand >= QtyOrdered) And Not OnHold Then Sheet1.Range("B5").Value = "Approved" Else Sheet1.Range("B5").Value = "On hold" End If End Sub
Ba quy tắc giúp cho điều kiện kết hợp trở nên dễ đọc và chính xác.
- Hãy bỏ qua mọi sự so sánh: VBA đánh giá các toán tử so sánh trước các toán tử logic, nhưng dấu ngoặc đơn tạo thành nhóm.ping Rõ ràng và giúp tránh sai sót khi tình trạng trở nên nghiêm trọng hơn về sau.
- Hãy lưu ý thứ tự ưu tiên của "And" so với "Or": A hoặc B và C được đọc là A Hoặc (B Và C)Nếu bạn có ý (A hoặc B) và CDấu ngoặc là bắt buộc.
- Áp dụng điều kiện "Không" cho kiểu dữ liệu Boolean, cũng không áp dụng cho kiểu dữ liệu Number: Không đang chờ Đọc một cách tự nhiên. Tránh Không phải là 5Vì Not thực hiện phép toán bitwise trên các số và trả về -6 thay vì False.
⚠️ Cảnh báo: VBA không thực hiện rút ngắn mạch. Trong Nếu (ws là Nothing) hoặc (ws.Name = “Data”) thìPhần thứ hai vẫn chạy ngay cả khi phần đầu tiên đúng, điều này gây ra lỗi thời gian chạy 91. Hãy tách các điều kiện kiểm tra như vậy thành các câu lệnh If lồng nhau.
Xor, Eqv và Imp Operacác công ty trong VBA
Các toán tử AND, OR và NOT bao gồm hầu hết mọi điều kiện thường ngày, nhưng VBA cung cấp thêm ba toán tử logic khác đôi khi thể hiện một quy tắc rõ ràng hơn nhiều so với một chuỗi các câu lệnh If lồng nhau.
| Operator | Trả về True khi | Ví dụ | Đầu ra |
|---|---|---|---|
| xor | Chỉ một trong hai điều kiện là đúng, không bao giờ cả hai cùng đúng. | (1 = 1) Xor (5 = 0) | Thật |
| Tương đương | Cả hai điều kiện đều có cùng giá trị, cả hai đều đúng hoặc cả hai đều sai. | (1 = 1) Eqv (2 = 2) | Thật |
| Imp | Điều kiện thứ nhất kéo theo điều kiện thứ hai; chỉ có Đúng Sai mới là sai. | (1 = 1) Imp (5 = 0) | Sai |
Phép toán XOR là phép toán thực tế nhất trong ba phép toán. Nó phù hợp với quy tắc như "giảm giá áp dụng cho nhân viên hoặc thành viên chương trình khách hàng thân thiết, nhưng không áp dụng cho người vừa là nhân viên vừa là thành viên chương trình khách hàng thân thiết". Phép toán Eqv và Imp chủ yếu xuất hiện trong các đoạn mã cũ và trong các bài tập logic, vì vậy việc nhận biết chúng quan trọng hơn việc viết ra chúng.
Tải xuống Excel chứa mã ở trên
