Cách dùng ba dạng câu lệnh If trong VBA Excel

Khi bạn cần kiểm tra điều kiện trong worksheet & điều khiển macro để đáp ứng yêu cầu đề ra. Lệnh If ..Then trong VBA được dùng để xử lý vấn đề đó.
Cách dùng ba dạng câu lệnh If trong VBA Excel

Hinh anh cau lenh if trong vba excel

Trong một số trường hợp, bạn phải sử dụng macro để kiểm tra những điều kiện đặc biệt trong worksheet và điều khiển chúng để đáp ứng được yêu cầu đề ra. Với mỗi điều kiện khác nhau thì macro sẽ thực hiện những công việc khác nhau.

Trong bài này mình sẽ hướng dẫn bạn cách sử dụng lệnh If ..Then trong VBA, đây là lệnh dùng để kiểm tra một điều kiện nào đó có thỏa mãn hay không. Nếu thỏa mãn thì chạy đoạn mã bên trong, ngược lại thì bỏ qua những đoạn mã đó.

Có ba loại câu lệnh IF khác nhau trong VBA:

Dạng 1: Câu lệnh If...Then

Một câu lệnh If ... Then chứa một biểu thức Boolean cho phép một hoặc nhiều câu lệnh. Dạng cơ bản nhất của If ... Then là lựa chọn True/False. Trong trường hợp này, chương trình của bạn sẽ xét một điều kiện cụ thể, xác định nó có đúng (true) hoặc sai (false) và hoạt động theo đó. Trong VBA, các lựa chọn True/False đơn giản được xử lý bởi câu lệnh If...Then.

Cú pháp:

Cú pháp một dòng đơn

If condition Then statement

Hoặc cú pháp khối

If condition Then

[statements]

End If

Trong đó:

Condition: Chính là điều kiện cần kiểm tra. Bạn có thể sử dụng một biểu thức logic trả về True hoặc False, hoặc bạn có thể sử dụng các phép so sánh toán học (>, <, >=, <=, =), so sánh chuỗi (=””) hoặc sử dụng bất kỳ hàm, biểu thức kiểm tra nào trả về giá trị số. Trong trường hợp đó, một giá trị trả về bằng “0” là tương đương với False và bất kỳ giá trị nào khác không là tương đương với True.

Statement: Câu lệnh VBA hoặc các câu lệnh sẽ được chạy nếu điều kiện (condition) trả về true. Ngược lại condition trả về false thì các câu lệnh này sẽ bị bỏ qua.

Chú ý: Nếu bạn chỉ có một câu lệnh, bạn có thể sử dụng một trong hai cú pháp trên. Nếu bạn có nhiều câu lệnh, bạn chỉ sử dụng cú pháp khối.

Sơ đồ khối:

Hinh anh cau lenh if trong vba excel 1

Ví dụ:

Sử dụng câu lệnh If... Then để xây dựng hàm tính tỷ suất lợi nhuận hàng hóa khi biết tổng chi phí và tổng doanh thu.

Mở Tab Developer > chọn Trình soạn thảo Visual Basic từ nhóm Code hoặc bạn cũng có thể nhấn tổ hợp phím Alt + F11 để mở. Nhấn vào Insert > chọn Module. Hãy nhập đoạn code sau:


Function ty_suat_loi_nhuan()
Dim tong_chi 
Dim tong_thu 
tong_chi = application.WorksheetFunction.sum(range(“Chiphi”))
tong_thu = application.WorksheetFunction.sum(range(“Doanhthu”))
if tong_thu <> 0 then
ty_suat_loi_nhuan = 100%*(tong_thu - tong_chi)/ tong_thu
End if
End Function

Hinh anh cau lenh if trong vba excel 2

Để áp dụng hàm tính tỷ suất lợi nhuận, các bạn phải đặt tên cho 2 trường là “Chiphi” và “Doanhthu”. Các bạn vào Formulas > chọn Define Name. Sau đó đặt tên tại nhãn “Name:” và chọn miền tham chiếu cho nhãn “Refers to:”.

Tại cột “Tỷ suất lợi nhuận(%)” (cột D), các bạn gõ tên hàm =ty_suat_loi_nhuan(). Sau đó, nhấn phím Enter. Kết quả thực hiện như hình ảnh dưới đây:

Hinh anh cau lenh if trong vba excel 3

Dạng 2: Câu lệnh If...Then...Else

Dạng câu lệnh If...Then...Else được sử dụng để xử lý thêm cho một kết quả false và lựa chọn này đã thêm cho VBA một vũ khí mạnh mẽ. Câu lệnh If ...Then... Else của VBA thực thi một tập hợp các lệnh tùy thuộc vào việc điều kiện đã chỉ định có được đáp ứng hay không. Nếu điều kiện (kiểm tra logic) là đúng, thì một nhóm hành động sẽ được thực hiện. Tuy nhiên, nếu điều kiện là sai, một tập hợp các hành động thay thế sẽ được thực hiện.

Cú pháp:

If condition Then

[True Statements ]

Else

[False Statements]

End If

Condition: Biểu thức logic trả về True hoặc False

True Statement: Câu lệnh chạy nếu condition (điều kiện) trả về True

False Statement: Câu lệnh chạy nếu condition (điều kiện) trả về False

Nếu condition (điều kiện) trả về True, VBA chạy khối lệnh giữa If...Then và Else. Nếu nó trả về False, VBA chạy nhóm lệnh giữa Else và End If.

Sơ đồ khối:

Hinh anh cau lenh if trong vba excel 4

Ví dụ:

Bảng dưới đây cho biết giá vốn (tính bằng đô la ở cột C) của sáu sản phẩm (cột B). Chúng tôi muốn tìm trạng thái (cột D) của từng sản phẩm dựa trên giá của nó. Đối với điều này, các tiêu chí được đề cập như sau:

● Nếu giá gốc>$30, trạng thái phải là "đắt".

● Nếu giá thành <$30, trạng thái phải là "không đắt".

Hinh anh cau lenh if trong vba excel 5

Phép thử logic là giá thành >30. Nếu điều kiện này là đúng, đầu ra trong cột D sẽ là "đắt". Tuy nhiên, nếu điều kiện đã cho là sai, thì kết quả thay thế sẽ là “không đắt”. Viết đoạn mã lệnh như sau:


Sub IF_ELSE_VD()

    Dim i As Integer

    For i = 5 To 10
        If Cells(i, 3).Value > 30 Then
            Cells(i, 4).Value = "Expensive"
        Else
            Cells(i, 4).Value = "Not Expensive"
        End If
    Next i

End Sub

Giải thích mã:

Khai báo biến “i” là số nguyên.

Sử dụng vòng lặp For Next để lặp qua các ô đã cho và thực hiện các tác vụ trên tất cả các ô đó.

Vòng lặp For Next được sử dụng vì mã cần được thực thi trong một số lần cụ thể. Hơn nữa, nhiều giá trị ô cần được kiểm tra.

Vì thử nghiệm cần được tiến hành trên các hàng từ 5 đến 10, nên vòng lặp For Next bắt đầu từ 5 và chạy cho đến 10.

Kiểm tra logic trong vòng lặp For Next. Đối với điều này, sử dụng câu lệnh If và lần lượt kiểm tra giá trị các ô Cells(i, 3) ngụ ý hàng “i” và cột 3 xem có thỏa mãn điều kiện hay không ?

Nếu giá trị trong ô Cells (i, 3) lớn hơn 30 (điều kiện được đánh giá là đúng), đầu ra phải là "đắt" trong ô liền kề của cột D.

Tiếp theo, kiểm tra logic (giá vốn>30) đánh giá là sai. Đi theo câu lệnh Else, các ô Cells (i, 4) phải hiển thị thông báo “không đắt” nếu giá vốn thấp hơn 30 đô la.

Mã lặp qua các hàng từ 5 đến 10, kiểm tra mọi giá trị của cột C và đưa ra kết quả tương ứng.

Do đó, kiểm tra logic cho các ô C5, C6, C7 và C10 đánh giá là đúng. Vì vậy, trạng thái trong các ô tương ứng của cột D xuất hiện là “đắt”.

Đối với các ô còn lại của cột D, trạng thái xuất hiện là “không đắt”. Đây là những cái có giá chi phí liên quan thấp hơn 30 đô la.

Chạy mã và đầu ra xuất hiện, như thể hiện trong hình dưới đây:

Hinh anh cau lenh if trong vba excel 6

Dạng 3: Câu lệnh If...Then...Elseif..Else

Để kiểm tra nhiều điều kiện, câu lệnh ElseIf được sử dụng. Đây là loại IF quan trọng và hữu ích nhất sẽ giúp bạn viết các câu lệnh điều kiện nâng cao. Trong loại này, bạn có thể chỉ định điều kiện thứ hai sau khi đánh giá điều kiện đầu tiên của mình.

Câu lệnh If cho phép một hoặc nhiều câu lệnh If Else có chứa biểu thức Boolean. Và sau đó nó được theo sau bởi một câu lệnh Else mặc định sẽ thực thi khi tất cả các câu lệnh trở thành Sai.

Cú pháp:

If condition1 Then

[True Statements1 ]

Elseif Condition 2 Then

[True Statements2]

...

ElseIf Condition n Then

[TrueStatementsn]

Else

[FalseStatements]

End If

Condition 1: Một biểu thức logic

True Statement1: Câu lệnh chạy nếu condition 1 trả về True

Condition 2: Một biểu thức logic khác

True Statement2: Câu lệnh chạy nếu condition 2 trả về True

False Statement: Câu lệnh sẽ chạy nếu cả condition 1 và condition 2 trả về False.

Cú pháp trên hoạt động như sau:

Đầu tiên, VBA sẽ kiểm tra điều kiện 1 (Condition 1). Nếu điều kiện này là đúng (True), khối lệnh giữa If...Then và Elseif... Then sẽ được chạy. Nếu điều kiện này sai (False), VBA sẽ kiểm tra điều kiện 2 (Condition 2).

Nếu điều kiện kiểm tra này là đúng, các câu lệnh giữa ElseIf...Then và Else được thực thi. Ngược lại, nếu điều kiện kiểm tra là sai, các câu lệnh giữa Else và End If sẽ được chạy.

Lưu ý:

● Người dùng có thể thêm bất kỳ số mệnh đề ElseIf nào vào câu lệnh If... Then... Else. Tuy nhiên, mệnh đề ElseIf phải xuất hiện trước mệnh đề Else.

● Bạn không phải sử dụng phần Else nếu bạn không cần nó.

Sơ đồ khối:

Hinh anh cau lenh if trong vba excel 7

Ví dụ:

Bảng dưới đây cho biết điểm trung bình môn học ở cột C của sáu sinh viên (cột B). Chúng tôi muốn đánh giá học lực (cột D) của từng sinh viên dựa trên điểm trung bình môn học. Đối với điều này, các tiêu chí được đề cập như sau:

● Nếu 10 > Điểm trung bình ≥ 8.0: Đánh giá phải là "Học lực Giỏi".

● Nếu 8 > Điểm trung bình ≥ 6.5: Đánh giá phải là "Học lực Khá".

● Nếu 6.5 > Điểm trung bình ≥ 5.0: Đánh giá phải là "Học lực Trung bình".

● Nếu 5 > Điểm trung bình ≥ 0: Đánh giá phải là "Học lực Kém".

Hinh anh cau lenh if trong vba excel 8

Viết đoạn mã lệnh như sau:


Sub Danh_Gia_Hoc_Luc()
    Dim i As Integer
Sheets(“Sheet1”).Select
    For i = 5 To 10
        If Cells(i, 3).Value >= 8 Then
            Cells(i, 4).Value = "Hoc luc Gioi"
        Elseif Cells(i, 3).Value >= 6.5 then
            Cells(i, 4).Value = "Hoc luc Kha"
        Elseif Cells(i, 3).Value >= 5 then
            Cells(i, 4).Value = "Hoc luc Trung binh"
	Else
            Cells(i, 4).Value = "Hoc luc Kem"
        End If
    Next i

End Sub

Kết quả thực thi chạy mã như sau:

Hinh anh cau lenh if trong vba excel 9

Sử dụng câu lệnh IF kết hợp với toán tử And và Or

Vấn đề với If...Then...Else là thông thường bạn sẽ chỉ có thể tạo một lựa chọn đơn. Câu lệnh sẽ tính kết quả logic đơn và thực hiện một trong hai hành động. Tuy nhiên, nhiều tình huống đòi hỏi nhiều lựa chọn trước khi bạn có thể quyết định hành động nào diễn ra. Nếu chỉ sử dụng câu lệnh If thì công việc sẽ rất cồng kềnh, rắc rối.

Một giải pháp cho vấn đề nhiều lựa chọn là kết hợp nhiều biểu thức logic trong một câu lệnh If...Then đơn. Bạn có thể kết hợp các biểu thức logic bằng cách sử dụng toán tử And và Or của VBA. Điều này sẽ giúp bạn dễ dàng thực hiện công việc của mình và giúp chương trình sáng sủa, dễ đọc hơn.

Sử dụng toán tử And:

Cú pháp:

If condition1 And condition2 Then

[Statements 1 ]

Else

[Statements 2]

End If

Statements 1 (khối lệnh 1) chỉ thực hiện khi cả hai điều kiện 1 (condition1) và điều kiện 2 (condition2) đều đúng. Chỉ 1 trong hai điều kiện sai thì Statements 2 (khối lệnh 2) sẽ thực hiện.

Sử dụng toán tử Or:

Cú pháp:

If condition1 Or condition2 Then

[Statements 1 ]

Else

[Statements 2]

End If

Statements 1 (khối lệnh 1) thực hiện khi một trong hai điều kiện 1 (condition1) và điều kiện 2 (condition2) là đúng. Cả hai điều kiện sai thì Statements 2 (khối lệnh 2) sẽ thực hiện.

Sử dụng nhiều toán tử And:

Cú pháp:

If condition1 And condition2 ... And condition n Then

[Statements 1 ]

Else

[Statements 2]

End If

Statements 1 (khối lệnh 1) chỉ thực hiện khi tất cả các điều kiện 1 (condition1) và điều kiện 2 (condition2) và điều kiện n (condition n) đều đúng. Chỉ 1 trong số n điều kiện sai thì Statements 2 (khối lệnh 2) sẽ thực hiện.

Sử dụng nhiều toán tử Or:

Cú pháp:

If condition1 Or condition2 ... Or condition n Then

[Statements 1 ]

Else

[Statements 2]

End If

Statements 1 (khối lệnh 1) thực hiện khi một trong số các điều kiện 1 (condition1) hoặc điều kiện 2 (condition2) hoặc điều kiện n (condition n) là đúng. Tất cả n điều kiện sai thì Statements 2 (khối lệnh 2) sẽ thực hiện.

Ví dụ 1:

Bạn có thể xác định tên đất dựa vào hệ số rỗng tự nhiên, chỉ số dẻo và độ sệt.


Sub Ten_dat_VD()
Dim hsor as single
Dim dodeo as single
Dim doset as single
Hsor=InputBox(“Nhap he so rong tu nhien:”)
dodeo =InputBox(“Nhap gia tri chi so deo:”)
doset =InputBox(“Nhap gia tri do set cua dat:”)
If hsor >1.5 and dodeo >=17 and doset > 1 Then
Msgbox “Day la dat Bun set!!”
elseIf hsor >1.0 and dodeo >=7 and doset > 1 Then
Msgbox “Day la dat Bun set pha!!”
elseIf hsor >0.9 and dodeo >=1 and doset > 1 Then
Msgbox “Day la dat Bun cat pha!!”
Else
Msgbox “Chua xac dinh ten dat!!”
End if
End Sub

Ví dụ 2:

Kiểm tra tháng nhập vào có bao nhiêu ngày.

Để thực hiện yêu cầu, trước hết hãy cùng mình phân tích bài toán 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

Tham khảo các chủ đề có liên quan khác:

Đăng nhận xét