Trong VBA Excel, hàm IF được sử dụng khi bạn muốn kiểm tra một kết quả theo một hoặc nhiều điều kiện cho trước. Khi điều điều kiện đúng, lệnh nhánh đúng sẽ được thực thi hoặc nếu sai, lệnh nhánh sai sẽ được thực thị.

Để hiểu rõ hơn về lệnh IF trong VBA , các bạn hãy cùng mình xem qua cấu trúc và các ví dụ về cách sử dụng được tổng hợp dưới đây nhé.

Cách sử dụng hàm IF trong VBA Excel

Sẽ có 2 dạng lệnh IF bạn sẽ gặp trong VBA là:

  • IF đơn: chỉ có một điều kiện
  • IF nhiều điều kiện: có nhiều hơn 1 điều kiện.

1) Hàm IF đơn

Cú pháp:
IF <điều kiện> THEN 
<lệnh thực hiện nếu điều kiện đúng>
Else
<lệnh thực hiện nếu điều kiện sai>
END IF
Chú thích cú pháp:
  • <điều kiện>: có thể là các phép so sánh toán học (>, <, >=, <=, =), so sánh chuỗi (=””), các hàm kiểm tra giá trị (kiểm tra số, kiểm tra TRUE/ FALSE)…
  • IF <điều kiện> THEN: nếu điều kiện kiểm tra là đúng thì thực thi lệnh
  • Else: nếu điều kiện trong IF <điều kiện> THEN sai thì lệnh trong ELSE sẽ được thực thi.
  • END IF: kết thúc lệnh cho một hàm IF. 💡 Mỗi hàm IF sẽ kèm theo một END IF.
Ví dụ: Kiểm tra số nhập từ InputBox lớn hay nhỏ hơn 0.
Sub kiemtra_soduong()
Dim so As Integer
x = InputBox("Nhao so", "So sanh", 0)
If x >= 0 Then
MsgBox "So vua nhap la so lon hon hoac bang 0"
Else
MsgBox "So vua nhap la so nhỏ hơn 0"
End If
End Sub

2) Hàm IF nhiều điều kiện

Khi dùng hàm IF trong Excel, khi muốn so sánh nhiều điều kiện chúng ta phải sử dụng nhiều câu lệnh IF lồng vào ở điều kiện đúng hoặc sai. Nhưng trong VBA, các bạn có thể sử dụng ELSEIF để tạo thêm một điều kiện so sánh.

💡 Tuy bạn có thể tạo nhiều ELSEIF nhưng không nên tạo quá nhiều vì sẽ ảnh hướng tới hiệu suất. Thay vào đó bạn có thể sử dụng hàm Switch trong VBA.

Cú pháp
If <điều kiện 1> Then
<lệnh thực thi nếu điều kiện 1 đúng>
ElseIf <điều kiện 2> Then
<lệnh thực thi nếu điều kiện 2 đúng>
...
ElseIf <điều kiện thứ n> Then
<lệnh thực thi nếu điều kiện thứ n đúng>
Else
<lệnh thực thi nếu các điều kiện trên không đúng>
End If
Ví dụ: So sánh số nhập từ InputBox với 0
Sub kiemtra_so()
Dim so As Integer
x = InputBox("Nhao so", "So sanh", 0)
If x = 0 Then
MsgBox "So vua nhap la so 0"
ElseIf x > 0 Then
MsgBox "So vua nhap lon hon 0"
Else
MsgBox "So vua nhap nho hon 0"
End If
End Sub

3) Cách áp dụng hàm IF VBA vào Excel

Hàm IF trong VBA được sử dụng rất rộng, nó có thể được sử dụng riêng hay được lồng vào trong các vòng lặp để bắt giá trị theo điều kiện. Vậy để rõ hơn về cách sử dụng hàm IF trong VBA, các bạn hãy tham khảo tiếp các ví dụ cụ thể dưới đây nhé.

Ví dụ 1: Sử dụng điều kiện IF đơn không ELSE

Sử dụng lệnh IF đơn không ELSE khi bạn chỉ muốn kiểm tra điều kiện đúng thì thoát chương trình mà không cần kiểm tra đến điều kiện sai.

Ví dụ: Kiểm tra số nhập vào từ InputBox và hiển thị ra MsgBox nếu số nhập là 5.

ham-if-va-else-if-vba-excel-149-1

Kết quả: Khi nhập số 5 vào InputBox thì hiển thị ra MsgBox và thoát chương trình.

Sub kiem_tra_so_5()
Dim so As Integer
so = InputBox("Nhao so", "kiem_tra_so_5", 0)
If so = 5 Then
MsgBox "Ban vua nhap so 5"
Exit Sub
End If
MsgBox "Ban vua nhap so khac 5"
End Sub
Ví dụ 2: Kiểm tra tháng nhập vào có bao nhiêu ngày

Để thực hiện ví dụ, trước hết cùng mình phân tích 1 xíu nhé.

  • Trong 1 năm chỉ có 12 tháng nên sẽ có một điều kiện kiểm tra tháng nhập vào là tháng đó nằm trong giới hạn >0 và <13. Nếu ngoài vùng điều kiện thì sai và thoát chương trình.
  • Khi điều kiện tháng đã đúng thì sẽ kiểm tra tiếp các điều kiện:
    • Nếu tháng đó là tháng 1 hoặc  3, 5, 7, 8, 10, 12 thì tháng có 31 ngày.
    • Nếu là tháng 2 thì chỉ có 28 ngày ( nếu năm nhuận sẽ 29).
    • Còn lại thì tháng sẽ có 30 ngày.

👉 Như vậy, ví dụ này sẽ cần 2 hàm IF: 1 hàm sẽ kiểm tra nhập tháng hợp lệ và một hàm sẽ kiểm tra tháng nhập là tháng mấy.

💡 Để rút ngắn đoạn lệnh khi so sánh nhiều giá trị trong một điều kiện, bạn có thể sử dụng các lệnh logic như:

  • AND: Sử dụng khi bạn muốn ràng buộc nhiều điều kiện với nhau.  Chỉ đúng khi tất cả điều kiện đều đúng.
  • OR: Sử dụng khi bạn chỉ cần 1 điều kiện đúng.

✅ Và sau khi phân tích, bạn sẽ có một hàm kiểm tra số ngày của tháng như sau:

Sub so_ngay_cua_thang()
Dim thang As Integer
thang = InputBox("Nhap thang", "So ngay cua thang", 0)
If thang > 0 And thang < 13 Then
If thang = 1 Or thang = 3 Or thang = 5 Or thang = 7 Or thang = 8 Or thang = 10 Or thang = 12 Then
MsgBox "Thang " & thang & " co 31 ngày"
ElseIf thang = 2 Then
MsgBox "Thang " & thang & " co 28 ngày"
Else
MsgBox "Thang " & thang & " co 30 ngày"
End If
Else
MsgBox "Thang khong hop le"
End If
End Sub
Ví dụ 3: Nhập nhanh ngày tháng bằng VBA

Nếu bạn đã đọc qua bài viết về thủ thuật nhập nhanh ngày tháng trong Excel thì có 1 cách mình sử dụng VBA. Và để hiểu rõ hơn về cách hoạt động của cách đó, các bạn cùng mình phân tích tìm hiểu lại nhé.

Để thực hiện được ví dụ này sẽ cần phải các bước như:

  • Tạo hàm Sub Worksheet_Change(ByVal Target As Range) trong VBA Sheet để bắt sự kiện thay đổi. Mỗi khi có sự thay đổi tác động đến Cells thì sự kiện này sẽ thực thi.
  • Xác định Range bắt sự kiện. Vì Range của Excel rất rộng nên các bạn chỉ nên bắt sự kiện thay đổi tại một hàng hoặc cột.

💡 Lưu ý: Nếu bạn muốn bắt sử kiện Worksheet_Change ở Sheet nào thì bạn phải tạo sự kiện ở Sheet đó.

ham-if-va-else-if-vba-excel-149-2

Kết quả: Mỗi khi tác động đến cột A thì VBA sẽ thực hiện ghi thời gian vào Cells mà bạn vừa tác động đến. Các tác động có thể là:

  • Nhập số 0 hoặc thoát Cells sẽ ghi thời gian hiện tại.
  • Nhập số <99 để tính ngày hiện tại + với số nhập.
Sub Worksheet_Change(ByVal Target As Range)
Dim xrng As Range
Dim chuoi As String
On Error GoTo Err
Set xrng = Range("A:A")
If Not Application.Intersect(xrng, Range(Target.Address)) Is Nothing Then
If Range(Target.Address).Value = 0 Then
Range(Target.Address) = Now()
Exit Sub
End If
End If
Err: 'thoat loi
End Sub

OK! Như vậy là bạn đã tìm hiểu qua về cách sử dụng hàm IF trong VBA Excel. Bạn hãy làm chủ hàm IF cả trong Excel lẫn VBA vì nó rất quan trọng. Hàm IF sẽ giúp bạn giải quyết rất nhiều khi giải quyết vấn đề về số liệu bẳng Excel.

Hy vọng bài chia sẻ này hữu ích với các bạn.

Chúc các bạn thành công!

BÌNH LUẬN

Please enter your comment!
Please enter your name here