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.

  • 🔗 Mục đích: Các toán tử logic đánh giá nhiều hơn một điều kiện bên trong một câu lệnh If duy nhất.
  • VÀ Operator: Hàm chỉ trả về True khi mọi điều kiện mà nó kết hợp đều đúng.
  • OR Operator: Trả về True khi ít nhất một trong các điều kiện là True.
  • 🔄 KHÔNG Operator: Đảo ngược kết quả, biến True thành False và False thành True.
  • 📊 Bảng sự thật: Một lưới tham chiếu duy nhất hiển thị kết quả của mỗi toán tử cho mọi tổ hợp đầu vào.
  • 🧮 thêm Operator: Các toán tử Xor, Eqv và Imp xử lý các điều kiện loại trừ, tương đương và ngầm định.
  • ⚠️ Không xảy ra hiện tượng đoản mạch: VBA đánh giá mọi phần của điều kiện, vì vậy điều kiện kiểm tra điều kiện (guard test) phải nằm trong một câu lệnh If lồng nhau.

VBA logic OperaTừ khóa: AND, OR, NOT trong Excel VBA

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À: Đ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ớ. 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

VBA logic Operaxoắn
VBA logic Operaxoắn

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

Câu Hỏi Thường Gặp

Không có giới hạn thực tế nào, nhưng khả năng đọc hiểu sẽ giảm nhanh chóng sau ba hoặc bốn câu. Hãy chuyển điều kiện dài thành một biến Boolean với tên mô tả rõ ràng, sau đó kiểm tra biến đó trong câu lệnh If.

Khi áp dụng cho một số, phép toán Not thực hiện phép đảo bitwise chứ không phải phép đảo logic. Chỉ nên áp dụng nó cho phép so sánh hoặc biến Boolean, chẳng hạn như Not (Qty > 0), để kết quả là True hoặc False.

Về mặt logic thì giống nhau, nhưng cú pháp thì khác. Công thức trong bảng tính gọi chúng là các hàm, ví dụ: AND(A1>0, B1>0). Trong VBA, chúng được đặt giữa các điều kiện, như trong If A1 > 0 And B1 > 0 Then.

Đúng vậy. Hãy dán điều kiện vào và trợ lý AI sẽ viết lại nó với dấu ngoặc rõ ràng hơn hoặc tách nó thành các biến Boolean có tên. Hãy kiểm tra lại kết quả bằng bảng chân lý, vì việc đơn giản hóa sai sẽ làm thay đổi hành vi một cách âm thầm.

Đúng vậy. Hãy cung cấp biểu thức và trợ lý AI sẽ liệt kê mọi tổ hợp đầu vào cùng với kết quả tương ứng, từ đó nhanh chóng phát hiện ra một nhánh không thể đạt tới hoặc một dấu ngoặc đặt sai vị trí.

Tóm tắt bài viết này với: