Sponsored Banner

Sponsored Ad

Sponsored Ad

Cách dùng câu lệnh Select Case trong VBA Excel

Câu lệnh Select...Case sẽ là lựa chọn tốt hơn If...ElseIf, nếu muốn có nhanh chóng một số lượng các kiểm tra mà bạn cần lớn hơn.
Cách dùng câu lệnh Select Case trong VBA Excel
📖 Mục lục (nhấn để ẩn/hiện)

    Cách dùng câu lệnh Select Case trong VBA Excel

    Câu lệnh Select Case trong VBA Excel là một cấu trúc điều khiển giúp thay thế cho nhiều câu lệnh If...ElseIf, giúp mã nguồn gọn gàng và dễ đọc hơn. Trong bài viết này, chúng ta sẽ tìm hiểu cú pháp, ví dụ thực tế, case study ứng dụng và FAQ thường gặp.

    Giới thiệu

    Khi lập trình VBA trong Excel, bạn sẽ thường xuyên phải xử lý các tình huống có nhiều điều kiện rẽ nhánh khác nhau. Nếu dùng If...ElseIf liên tiếp, đoạn code sẽ trở nên dài dòng và khó bảo trì. Đây là lúc Select Case phát huy tác dụng. Cấu trúc này cho phép bạn kiểm tra nhiều giá trị của một biến chỉ trong vài dòng code ngắn gọn, giống như cách bạn tạo menu lựa chọn.

    Bài viết này sẽ hướng dẫn bạn:

    • Cú pháp cơ bản của Select Case
    • Ví dụ minh họa và ứng dụng thực tế
    • Case study trong quản lý bán hàng
    • Các câu hỏi thường gặp (FAQ)
    Hinh anh cau lenh select trong vba excel

    Thực hiện nhiều phép kiểm tra với If...ElseIf là một kỹ thuật thuận tiện. Các bạn có thể tham khảo bài viết đầy đủ về cách sử dụng 03 dạng cú pháp câu lệnh If...Then, trong đó bao gồm: cú pháp, sơ đồ khối, các ví dụ thực tiễn áp dụng kèm giải thích chi tiết. Các bạn có thể truy cập bài viết tại đây.

    Tuy nhiên, nếu muốn có nhanh chóng một số lượng các kiểm tra mà bạn cần lớn hơn thì câu lệnh Select...Case sẽ là lựa chọn tốt hơn.

    Đối với câu lệnh Select...Case được sử dụng, bạn phải cung cấp một biểu thức logic ở phần đầu và sau đó liệt kê một loạt các kết quả khả thi. Mỗi giá trị được gọi là một Case, bạn cung cấp một hoặc nhiều câu lệnh VBA để thực thi sẽ là Case True. Câu lệnh Case Else được thực thi nếu biểu thức kiểm tra không khớp với bất kỳ trường hợp nào được chỉ định bởi người dùng.

    Câu lệnh VBA Select... Case được sử dụng thay cho nhiều câu lệnh If lồng nhau. VBA Select Case làm cho chương trình VBA dễ hiểu và thời gian thực hiện nhanh hơn.

    Cú pháp:

    Select Case expression

    Case expressionlist1

    [statements1]

    Case expressionlist2

    [statements2]

    ....

    Case expressionlistn

    [ Statementsn]

    Case Else

    [ Elsestatements]

    End Select

    Trong đó:

    Expression: Đây là biểu thức kiểm tra, được xét ở phần đầu cấu trúc. Nó phải trả về một giá trị (logic (đúng/sai), số, chuỗi...).

    Expressionlist: Mỗi danh sách biểu thức có một hoặc nhiều kết quả khả thi cho expression. Kết quả này là các giá trị hoặc các biểu thức tách biệt nhau bằng dấu phẩy (,). VBA sẽ xem xét mỗi phần tử trong danh sách để xem một giá trị có thỏa mãn expression hay không ? Biểu thức có thể chấp nhận bất cứ một các dạng sau:

    Expression (giá trị, biểu thức).

    Expression to expression (một miền giá trị, biểu thức).

    Is logical expression (một biểu thức logic).

    Ở đây từ khóa to được sử dụng để xác định giá trị biến đổi trong một miền (ví dụ: 1 to 100). Từ khóa Is được sử dụng để xác định một miền giá trị mở (ví dụ: Is ≥ 1000).

    [Statements]: Khối lệnh, mỗi khối lệnh có thể chứa 0 hay nhiều dòng lệnh. Các câu lệnh mà VBA chạy nếu bất kỳ các phần nào gắn với Expressionlist thỏa mãn biểu thức kiểm tra Expression. VBA sẽ chạy khối lệnh [ Elsestatements] nếu không có Expressionlist nào chứa giá trị thỏa mãn biểu thức kiểm tra Expression.

    Sơ đồ khối:

    Hinh anh cau lenh select trong vba excel 1

    Bạn nên sử dụng Select...Case trong một số trường hợp như sau:

    ● Chỉ kiểm tra 1 biến giá trị với nhiều điều kiện khác nhau.

    ● Nhiều điều kiện rời rạc nhưng so sánh với 1 biến cố định và có thể nhóm được.

    ● Biến kiểm tra đơn giản, không cần xử lý. Còn IF sẽ sử dụng cho các câu điều kiện phức tạp hơn.

    ● Cần lệnh dễ đọc và chỉnh sửa.

    Ví dụ 1: Xác định trạng thái của đất

    Xác định trạng thái của đất theo Bảng dưới đây:

    Hinh anh cau lenh select trong vba excel 2

    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:

    
    Sub Trang_thai_dat()
    Dim do_set as single
    Dim i as integer
    For i = 3 To 8
    Sheets(“Sheet1”).Select
    do_set = cells(i,2).value
    Select case do_set
    Case 1, 1 to 10
    cells(i,2).offset(0,1).value=”Chay”
    Case 0.75 to 1
    cells(i,2).offset(0,1).value=”Deo Chay”
    Case 0.5 to 0.75
    cells(i,2).offset(0,1).value=”Deo Mem”
    Case 0.25 to 0.5
    cells(i,2).offset(0,1).value=”Deo Cung”
    Case 0 to 0.25
    cells(i,2).offset(0,1).value=”Nua Cung”
    Case is < 0
    cells(i,2).offset(0,1).value=”Cung”
    Case Else
    End Select
    Next i
    End Sub
    
    

    Giải thích mã:

    Sử dụng từ khóa Sub để bắt đầu một thủ tục.

    Sử dụng từ khóa Dim để khai báo các biến và kiểu dữ liệu của nó (biến đếm i là kiểu nguyên và biến do_set là kiểu single).

    Sử dụng vòng lặp For...Next để duyệt qua các ô ở cột B từ ô B3 đến ô B8.

    Sử dụng câu lệnh Select ... Case để kiểm tra giá trị độ sệt xem nó nằm trong miền giá trị nào. Nếu thỏa mãn điều kiện sẽ thực thi câu lệnh phân loại trạng thái đất bằng cách chuyển giá trị sang cột kế bên tương ứng (cột C) thông qua thuộc tính offset(0,1).

    Để chạy thủ tục trên đây. Các bạn nhấn chuột phải vào Sheet1 > chọn View code > cửa sổ soạn thảo mã VBA sẽ mở ra, các bạn nhấn vào Insert > chọn Module. Sau đó chép đoạn mã trên dán vào Module. Nhấn F5 để thực thi thủ tục.

    Kết quả thực thi như hình ảnh dưới đây:

    Hinh anh cau lenh select trong vba excel 3

    Ví dụ 2: Về Xếp loại của Học sinh

    Thủ tục này Xếp loại học sinh dựa trên điểm kiểm tra của họ. Trong ví dụ này, tiêu chí trường hợp thể hiện một loạt các giá trị. Bạn cũng sẽ nhận thấy rằng bạn có thể đặt các tiêu chí và hướng dẫn trên cùng một dòng. Tách tiêu chí khỏi hướng dẫn bằng dấu hai chấm.

    
    Sub Xep_Loai_HS()
    Dim Diem_TB As Range, Cot_Diem_TB As Range, Xep_Loai As Range
    Set Cot_Diem_TB = Range("B2", Range("B2").End(xlDown))
    
    For Each Diem_TB In Cot_Diem_TB
    Set Xep_Loai = Diem_TB.Offset(0, 1)
        Select Case Diem_TB
            Case 0 To 9: Xep_Loai = "G"
            Case 10 To 24: Xep_Loai = "F"
            Case 25 To 34: Xep_Loai = "E"
            Case 35 To 49: Xep_Loai = "D"
            Case 50 To 64: Xep_Loai = "C"
            Case 65 To 79: Xep_Loai = "B"
            Case 80 To 89: Xep_Loai = "A"
            Case 90 To 100: Xep_Loai = "A*"
         End Select
    Next Diem_TB
    End Sub
    
    

    Ví dụ 3: Trường hợp Select... Case lồng nhau

    Quy trình này tính toán tổng chiết khấu. Phần trăm chiết khấu là khác nhau đối với từng loại sản phẩm nhưng cũng phụ thuộc vào số lượng mua. Quy trình sử dụng cấu trúc Select... Case lồng nhau. Trong mỗi Select... Case cho danh mục sản phẩm, có Select... Case cho Số lượng lồng nhau trả về phần trăm chiết khấu chính xác.

    Hinh anh cau lenh select trong vba excel 4

    
    Sub Select_Case_Tinh_CK()
    Dim Loai As Range, Cot_Loai As Range, So_Luong As Range, Gia_SP As Range, Tong_CK As Range
    Dim P_tram_CK As Single
    Set Cot_Loai = Range("G3", Range("G3").End(xlDown))
    For Each Loai In Cot_Loai
    Set So_Luong = Loai.Offset(0, 1)
    Set Gia_SP = Loai.Offset(0, 2)
    Set Tong_CK = Loai.Offset(0, 3)
    Tong_CK.NumberFormat = "[$$-409]#,##0.00"
        Select Case Loai
            Case "A"
                Select Case So_Luong
                    Case 0 To 9: P_tram_CK = 0
                    Case 10 To 24: P_tram_CK = 0.02
                    Case 25 To 49: P_tram_CK = 0.03
                    Case 50 To 99: P_tram_CK = 0.05
                    Case Is >= 100: P_tram_CK = 0.08
                End Select
            Tong_CK = So_Luong * Gia_SP * (1 - P_tram_CK)
            Case "B"
                Select Case So_Luong
                    Case 0 To 9: P_tram_CK = 0
                    Case 10 To 24: P_tram_CK = 0.05
                    Case 25 To 49: P_tram_CK = 0.08
                    Case 50 To 99: P_tram_CK = 0.1
                    Case Is >= 100: P_tram_CK = 0.15
                End Select
            Tong_CK = So_Luong * Gia_SP * (1 - P_tram_CK)
            Case "C"
                Select Case So_Luong
                    Case 0 To 9: P_tram_CK = 0
                    Case 10 To 24: P_tram_CK = 0
                    Case 25 To 49: P_tram_CK = 0.05
                    Case 50 To 99: P_tram_CK = 0.07
                    Case Is >= 100: P_tram_CK = 0.1
                End Select
            Tong_CK = So_Luong * Gia_SP * (1 - P_tram_CK)
        End Select   
    Next Loai
    End Sub
    
    

    Giải thích mã:

    Sử dụng từ khóa Dim để khai báo các biến và kiểu dữ liệu tương ứng.

    Sử dụng từ khóa Set để lưu giá trị vào các biến đã khai báo.

    Sử dụng câu lệnh For Each ... Next để duyệt qua các phần tử của cột G từ G3 đến G8 (loại sản phẩm). Sử dụng từ khóa set kết hợp với thuộc tính offset để lưu các giá trị của cột H, cột I và cột J tương ứng.

    Với mỗi giá trị tương ứng của loại sản phẩm ta sử dụng một câu lệnh Select...Case để kiểm tra về mặt số lượng sản phẩm. Nếu thỏa mãn một trong số các điều kiện về số lượng sản phẩm, sẽ thực hiện câu lệnh tương ứng (gán giá trị phần trăm chiết khấu vào biến số) và thực hiện tính tổng chiết khấu tại các ô của cột J từ J3 đến J8.

    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. Sau đó chép đoạn mã trên dán vào Module. Nhấn F5 để thực thi thủ tục.

    Kết quả thực thi như hình ảnh dưới đây:

    Hinh anh cau lenh select trong vba excel 5

    Ví dụ 4: Phân loại điểm số

    Ví dụ dưới đây minh họa cách sử dụng Select Case để phân loại điểm số:

    
    Sub DanhGiaDiem()
        Dim Diem As Integer
        Diem = 85
    
        Select Case Diem
            Case Is >= 90
                MsgBox "Xuất sắc"
            Case Is >= 75
                MsgBox "Khá"
            Case Is >= 50
                MsgBox "Trung bình"
            Case Else
                MsgBox "Yếu"
        End Select
    End Sub
    
    💡 Mẹo: Bạn có thể dùng Case Is >= để so sánh phạm vi thay vì viết nhiều dòng If...ElseIf.

    Ví dụ thực tế

    Ví dụ 1: Phân loại ngày trong tuần

    
    Sub NgayTrongTuan()
        Dim Thu As String
        Thu = Format(Date, "dddd")
    
        Select Case Thu
            Case "Monday", "Tuesday", "Wednesday"
                MsgBox "Đầu tuần bận rộn"
            Case "Thursday", "Friday"
                MsgBox "Cuối tuần tới gần"
            Case Else
                MsgBox "Cuối tuần thư giãn"
        End Select
    End Sub
    

    Ví dụ 2: Tính thuế suất theo mức thu nhập

    
    Sub TinhThue()
        Dim ThuNhap As Double
        ThuNhap = 12000000
    
        Select Case ThuNhap
            Case Is <= 5000000
                MsgBox "Thuế suất 5%"
            Case Is <= 10000000
                MsgBox "Thuế suất 10%"
            Case Else
                MsgBox "Thuế suất 20%"
        End Select
    End Sub
    

    Case Study: Ứng dụng trong quản lý bán hàng

    Giả sử bạn quản lý cửa hàng với nhiều loại sản phẩm và muốn hiển thị khuyến mãi theo từng loại. Dùng Select Case sẽ giúp code gọn gàng hơn so với nhiều If...ElseIf.

    
    Sub KhuyenMai()
        Dim SanPham As String
        SanPham = "Laptop"
    
        Select Case SanPham
            Case "Laptop"
                MsgBox "Giảm 10%"
            Case "Điện thoại"
                MsgBox "Tặng ốp lưng"
            Case "Tai nghe"
                MsgBox "Mua 1 tặng 1"
            Case Else
                MsgBox "Không có khuyến mãi"
        End Select
    End Sub
    
    📌 Ghi chú: Đây là ví dụ thực tế thường gặp trong hệ thống POS (Point of Sale), giúp nhân viên nhanh chóng áp dụng khuyến mãi.

    Kết luận

    Câu lệnh Select Case trong VBA Excel giúp bạn viết code dễ đọc, dễ bảo trì hơn so với nhiều If...ElseIf lồng nhau. Bạn có thể áp dụng cho phân loại dữ liệu, xử lý điều kiện logic phức tạp hoặc xây dựng hệ thống tự động trong quản lý công việc.


    FAQ

    1. Select Case khác gì với If...ElseIf?

    Select Case ngắn gọn và dễ quản lý hơn khi có nhiều điều kiện trên cùng một biến.

    2. Có thể dùng Select Case với chuỗi không?

    Có, bạn có thể dùng để so sánh chuỗi (string) như trong ví dụ ngày trong tuần.

    3. Select Case có hỗ trợ phạm vi giá trị không?

    Có, bạn có thể dùng Case Is >= hoặc Case 1 To 10.

    4. Có thể dùng nhiều giá trị trong một Case không?

    Có, bạn có thể viết Case "A", "B", "C".

    5. Select Case có thay thế hoàn toàn If...ElseIf không?

    Không. If...ElseIf vẫn hữu ích khi cần kiểm tra nhiều biến hoặc nhiều điều kiện phức hợp.

    Đăng nhận xét