Hàm VBA IIF

Hướng dẫn này sẽ giải thích cách sử dụng IIF trong VBA

Hàm VBA IIF tương tự như sử dụng Hàm IF trong Excel. Nó kiểm tra nếu một điều kiện được đáp ứng, trả về một giá trị (hoặc phép tính) nếu TRUE, một giá trị (hoặc phép tính) khác nếu FALSE.

Nó tương tự như VBA If Statement, nhiều người coi nó là một lối tắt để sử dụng phương pháp này vì bạn chỉ cần viết một dòng mã để nhận được kết quả mong muốn thay vì sử dụng Nếu… Thì… Khác… Kết thúc Nếu lịch trình. Tuy nhiên, nó cần được sử dụng đúng cách vì nó có thể dẫn đến các vấn đề trong mã của bạn.

Cú pháp IIF

Hàm IFF bao gồm 3 phần - phần kiểm tra logic, phần đúng và phần sai.

  • Biểu hiện:Bài kiểm tra logic sẽ diễn ra.
  • Phần Đúng: Kết quả sẽ được trả về nếu phép thử logic là TRUE.
  • Phần Sai: Kết quả sẽ được trả về nếu phép thử logic là FALSE.

Viết một thủ tục hàm IIF

123 Hàm GetNames (strName As String) As StringGetNames = IIf (strName = "John", "Tên là John", "Tên không phải là John")Chức năng kết thúc

Trong hàm trên, chúng ta có thể sử dụng một thủ tục con để kiểm tra xem biến chúng ta truyền vào hàm có phải là chuỗi “John” hay không

123 Sub TestGetNamaes ()MsgBox GetNames ("John")Kết thúc Sub

Nếu chúng ta chạy thủ tục con TestGetNames, nó sẽ gọi Hàm GetNames và trả về một hộp thông báo.

Nếu chúng ta đã sử dụng phương thức If thay vào đó, mã sẽ trông như thế này:

1234567 Hàm GetNames (strName As String) As StringIf (strName = "John") Sau đóGetNames = "Tên là John"KhácGetNames = "Tên không phải là John"Kết thúc nếuChức năng kết thúc

Chúng tôi đã viết một cách hiệu quả một dòng mã thay vì 5 dòng mã - thật ấn tượng!

Tại sao sử dụng If Replace?

Hãy xem xét những điều sau

123 Hàm GetNames (strName As String) As StringGetNames = IIf (strName = "John", MsgBox ("Tên là John"), MsgBox ("Tên không phải là John"))Chức năng kết thúc

Bây giờ nếu bạn chạy Thủ tục con sau để gọi hàm của bạn

123 Sub TestGetNames ()GetNames ("John")Kết thúc Sub

Bạn sẽ nhận được cùng một hộp thông báo như trước, nhưng ngay sau đó - bạn sẽ nhận được hộp thông báo tiếp theo!

Hàm IIF thực thi cả hai phần TRUE và FALSE của dòng mã - nó không thoát khỏi mã khi nó đã tìm thấy điều kiện là đúng - nó vẫn thực hiện phần sai - do đó cho chúng ta một thông báo sai trong hộp tin nhắn thứ hai. Nếu bạn đã sử dụngNếu… Thì… Khác… Kết thúc Nếu - điều này sẽ không xảy ra - hàm IF chỉ thực thi phần TRUE hoặc FALSE của mã - tùy thuộc vào logic được chuyển đến mã.

Mã được thiết kế sai (có chủ đích!) Với các hộp thông báo được giữ trong dòng mã mà câu lệnh IIF nằm trên chứ không phải sau mã hoặc trong quy trình con. Khi hàm IIF chạy cả hai phần TRUE và FALSE của câu lệnh, cả hai thông báo đều được trả về.

Chúng tôi có thể sửa lỗi này bằng cách di chuyển hộp thông báo xuống bên dưới dòng chức năng IIF, như trong đoạn mã bên dưới hoặc bằng cách di chuyển hộp thông báo sang Thủ tục phụ theo ví dụ đầu tiên trong bài viết này.

1234 Hàm GetNames (strName As String) As StringGetNames = IIf (strName = "John", "Tên là John", "Tên không phải là John")MsgBox (GetNames)Chức năng kết thúc

Nếu bạn cẩn thận khi viết mã, chức năng IIF có thể giúp bạn tiết kiệm được nhiều dòng mã và phải nhập thêm!

IIF lồng nhau

Chúng ta có thể lồng hàm IIF theo cách tương tự như lồng hàm IF nhưng một lần nữa, mọi thứ được thực hiện trong một dòng.

123 Hàm GetDiscount (dblPrice As Double) As DoubleGetDiscount = IIf (dblPrice> = 500, 10, IIf (dblPrice> = 250, 5, IIf (dblPrice> = 100, 2.5, 0)))Chức năng kết thúc

Sau đó, chúng ta có thể gọi hàm này từ một Thủ tục con

12345 Sub FindDiscount ()Làm mờ dblP thành đôidblP = 899MsgBox ("Giảm giá bạn có thể nhận được là" & GetDiscount (dblP) & "%")Kết thúc Sub

hoặc bạn có thể gọi nó từ bên trong Excel, sử dụng nó như một UDF (Hàm do người dùng xác định)

Bạn sẽ giúp sự phát triển của trang web, chia sẻ trang web với bạn bè

wave wave wave wave wave