Cách sử dụng If-Then trong Excel 2016 VBA

0
5

If-Then là cấu trúc điều khiển quan trọng nhất của VBA. Bạn có thể sẽ sử dụng lệnh này hàng ngày. Sử dụng cấu trúc If-Then khi bạn muốn thực thi một hoặc nhiều câu lệnh một cách có điều kiện. Mệnh đề Khác tùy chọn, nếu được bao gồm, cho phép bạn thực thi một hoặc nhiều câu lệnh nếu điều kiện bạn đang kiểm tra là không đúng. Đây là một thủ tục CheckUser đơn giản, được mã hóa lại để sử dụng cấu trúc If-Then-Else:

Sub CheckUser2()
UserName = InputBox(“Enter Your Name: “)
If UserName = “Satya Nadella” Then
MsgBox (“Welcome Satya…”)
‘ …[More code here] …
Else
MsgBox “Sorry. Only Satya Nadella can run this.”
End If
End Sub

Ví dụ If-Then

Thường trình sau đây biểu thị cấu trúc If-Then mà không có mệnh đề Else tùy chọn:

Sub GreetMe()
If Time < 0.5 Then MsgBox “Good Morning”
End Sub

Quy trình GreetMe sử dụng chức năng Thời gian của VBA để lấy thời gian hệ thống. Nếu thời gian hiện tại nhỏ hơn 0,5, thói quen sẽ hiển thị lời chào thân thiện. Nếu Thời gian lớn hơn hoặc bằng 0,5, thì thói quen kết thúc và không có gì xảy ra.

Để hiển thị lời chào khác nếu Thời gian lớn hơn hoặc bằng 0,5, bạn có thể thêm một câu lệnh If-Then khác sau câu đầu tiên:

Sub GreetMe2()
If Time < 0.5 Then MsgBox “Good Morning” If Time >= 0.5 Then MsgBox “Good Afternoon”
End Sub

Lưu ý rằng> = (lớn hơn hoặc bằng) được sử dụng cho câu lệnh If-Then thứ hai. Điều này đảm bảo rằng cả ngày được bảo hiểm. Nếu> (lớn hơn) đã được sử dụng, sẽ không có thông báo nào xuất hiện nếu quy trình này được thực hiện vào đúng 12:00 trưa. Điều đó khá khó xảy ra, nhưng với một chương trình quan trọng như thế này, bạn không muốn có bất kỳ cơ hội nào.

Một ví dụ If-Then-Else

Một cách tiếp cận khác cho vấn đề trước sử dụng mệnh đề Khác. Đây là cùng một thói quen được mã hóa lại để sử dụng cấu trúc If-Then-Else:

Sub GreetMe3()
If Time < 0.5 Then MsgBox “Good Morning” Else _
MsgBox “Good Afternoon”
End Sub

Lưu ý rằng ký tự tiếp tục dòng (gạch dưới) được sử dụng trong ví dụ trước. Câu lệnh If-Then-Else thực sự là một câu lệnh. VBA cung cấp một cách mã hóa hơi khác các cấu trúc If-Then-Else sử dụng câu lệnh End If. Do đó, thủ tục GreetMe có thể được viết lại thành

Sub GreetMe4()
If Time < 0.5 Then
MsgBox “Good Morning”
Else
MsgBox “Good Afternoon”
End If
End Sub

Trong thực tế, bạn có thể chèn bất kỳ số lượng câu lệnh nào dưới phần If và bất kỳ số lượng câu lệnh nào dưới phần Khác. Cú pháp này dễ đọc hơn và làm cho các câu lệnh ngắn hơn.

Điều gì sẽ xảy ra nếu bạn cần mở rộng thói quen GreetMe để xử lý ba điều kiện: sáng, chiều và tối? Bạn có hai tùy chọn: Sử dụng ba câu lệnh If-Then hoặc sử dụng cấu trúc If-Then-Else lồng nhau . Lồng nhau có nghĩa là đặt cấu trúc If-Then-Else trong cấu trúc If-Then-Else khác. Cách tiếp cận đầu tiên, sử dụng ba câu lệnh If-Then, đơn giản hơn:

Sub GreetMe5()
Dim Msg As String
If Time < 0.5 Then Msg = “Morning” If Time >= 0.5 And Time < 0.75 Then Msg = “Afternoon” If Time >= 0.75 Then Msg = “Evening”
MsgBox “Good “ & Msg
End Sub

Một twist mới đã được thêm vào với việc sử dụng một biến. Biến Msg có giá trị văn bản khác nhau, tùy thuộc vào thời gian trong ngày. Câu lệnh MsgBox hiển thị lời chào: Chào buổi sáng, buổi chiều tốt hoặc buổi tối tốt lành.

Thường trình sau đây thực hiện cùng một hành động nhưng sử dụng cấu trúc If-Then-End If:

Sub GreetMe6()
Dim Msg As String
If Time < 0.5 Then Msg = “Morning” End If If Time >= 0.5 And Time < 0.75 Then Msg = “Afternoon” End If If Time >= 0.75 Then
Msg = “Evening”
End If
MsgBox “Good “ & Msg
End Sub

Sử dụng Else If

Trong các ví dụ trước, mọi câu lệnh trong thường trình được thực thi. Một cấu trúc hiệu quả hơn một chút sẽ thoát khỏi thói quen ngay khi một điều kiện được tìm thấy là đúng. Ví dụ, vào buổi sáng, quy trình sẽ hiển thị thông báo Chào buổi sáng và sau đó thoát – mà không đánh giá các điều kiện không cần thiết khác.

Với một thói quen nhỏ như thế này, bạn không phải lo lắng về tốc độ thực hiện. Nhưng đối với các ứng dụng lớn hơn trong đó tốc độ là quan trọng, bạn nên biết về một cú pháp khác cho cấu trúc If-Then.

Đây là cách bạn có thể viết lại thói quen GreetMe bằng cách sử dụng cú pháp này:

Sub GreetMe7()
Dim Msg As String
If Time < 0.5 Then Msg = “Morning” ElseIf Time >= 0.5 And Time < 0.75 Then
Msg = “Afternoon”
Else
Msg = “Evening”
End If
MsgBox “Good “ & Msg
End Sub

Khi một điều kiện là đúng, VBA thực thi các câu lệnh có điều kiện và cấu trúc If kết thúc. Nói cách khác, quy trình này hiệu quả hơn một chút so với các ví dụ trước. Sự đánh đổi là mã khó hiểu hơn.

Một ví dụ If-Then khác

Đây là một ví dụ khác sử dụng dạng đơn giản của cấu trúc If-Then. Quy trình này nhắc người dùng về số lượng và sau đó hiển thị mức giảm giá phù hợp, dựa trên số lượng người dùng nhập:

Sub ShowDiscount()
Dim Quantity As Long
Dim Discount As Double
Quantity = InputBox(“Enter Quantity:”)
If Quantity > 0 Then Discount = 0.1
If Quantity >= 25 Then Discount = 0.15
If Quantity >= 50 Then Discount = 0.2
If Quantity >= 75 Then Discount = 0.25
MsgBox “Discount: “ & Discount
End Sub

Lưu ý rằng mỗi câu lệnh If-Then trong thường trình này được thực thi và giá trị Giảm giá có thể thay đổi khi các câu lệnh được thực thi. Tuy nhiên, thường trình hiển thị giá trị chính xác cho Chiết khấu vì các câu lệnh If-Then theo thứ tự tăng dần các giá trị Giảm giá.

Quy trình sau đây thực hiện các tác vụ tương tự bằng cách sử dụng cú pháp Else If thay thế. Trong trường hợp này, thường trình kết thúc ngay sau khi thực hiện các câu lệnh cho một điều kiện thực sự:

Sub ShowDiscount2()
Dim Quantity As Long
Dim Discount As Double
Quantity = InputBox(“Enter Quantity: “)
If Quantity > 0 And Quantity < 25 Then
Discount = 0.1
ElseIf Quantity >= 25 And Quantity < 50 Then
Discount = 0.15
ElseIf Quantity >= 50 And Quantity < 75 Then
Discount = 0.2
ElseIf Quantity >= 75 Then
Discount = 0.25
End If
MsgBox “Discount: “ & Discount
End Sub

Các cấu trúc If-Then này khá cồng kềnh. Bạn có thể muốn sử dụng cấu trúc If-Then chỉ cho các quyết định nhị phân đơn giản.

Xem thêm: VBA Excel là gì? Lập trình VBA trong Excel là gì?

Tham khảo khóa học VBA Excel tại NIIT-ICT Hà Nội

LEAVE A REPLY

Please enter your comment!
Please enter your name here