VBA Excel Cấp Tốc Bài 8 - Cách Tạo Checkbox Hàng Loạt Trong Excel

Trong Excel thường hay sử dụng Checkbox để tạo hộp kiểm tra cho đẹp mắt, gọn gàng và nhìn chuyên nghiệp cũng như người dùng dễ dàng tích chọn tùy theo từng mục đích khác nhau. Với bài viết này ta sẽ tập trung vào checkbox với mục đích giúp bạn tạo ra một loạt các checkbox cũng như quản lý chúng trong Excel một cách hiệu quả nhất.

Xem bài học trước

>> VBA Excel Cấp Tốc Bài 1 - Lọc Dữ Liệu Nhiều Điều Kiện Với Advanced Filter

>> VBA Excel Cấp Tốc Bài 2 - In Bảng Cửu Chương

>> VBA Excel Cấp Tốc Bài 3 - In Ấn Nhanh Hàng Loạt

>> VBA Excel Cấp Tốc Bài 4 - Xóa Tự Động Hàng Loạt Sheets Không Active

>> VBA Excel Cấp Tốc Bài 5 - Copy File Từ Một Thư Mục Sang Thư Mục Khác

>> VBA Excel Cấp Tốc Bài 6 - Hướng Dẫn Sử Dụng Record Macro Trong Excel Từ Cơ Bản Đến Nâng Cao

>> VBA Excel Cấp Tốc Bài 7 - Cách Gộp Nhiều File Excel Vào Một File Duy Nhất

Video hướng dẫn thực hiện

Tạo Checkbox có tích và không có tích.

Tạo 2 checkbox 1 cái có dấu tích và một cái không dấu tích: vào Insert -> Symbol -> phần Font chọn là Webdings -> tìm hình checkbox có dấu tích và không dấu tích hoặc gõ mã 254 ở ô Character code để chọn checkbox có dấu tích và mã 168 để chọn checkbox không có dấu tích.

tạo checkbox

Bôi đen vùng tạo checkbox từ ô B6 đến B21 -> vào Home chọn Webdings ở ô kề ô cỡ chữ.

wingdings cho checkbox

Mở Visual Basic lên để lập trình cho cái Checkbox vừa tạo: Developer -> Visual Basic -> kích đúp vào Sheet1 trong cửa sổ Visual Basic -> Tại ô có chữ General tích chọn lại Worksheet và ô kế bênh là SelectionChange.

worksheet trong visual basic

Gọi một câu lệnh If Not Intersect(Target, Range("B6:B21")) Is notthing Then và xuống hàng End If. Trong đó Renge("B6:B21") là bắt đầu của cột checkbox cột B từ B6 đến B21.

lệnh if và end if

Trong cú pháp If vừa rồi bạn dùng câu lệnh If Target.Value = "" trong đấu đoạn kép này bạn tích vào checkbox có tích chọn rồi copy cái mã đó sau đó dán vào đây và gõ Then ở cuối. If Target.Value = "þ" Then
Tiếp theo bạn gõ Target.Value = "" trong ngoặc kép này bạn copy mã của checkbox không có tích chọn song dán vào đây. Target.Value = "¨"
Đến điều kiện Else bạn gõ Else -> Enter -> copy phần lệnh If của Checkbox có tích chọn dán vào đây -> Enter -> End If. Target.Value = "þ" 

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B6:B21")) Is Nothing Then
    
    If Target.Count > 1 Then Exit Sub
    If Target.Value = "þ" Then
        Target.Value = "¨"
    Else
        Target.Value = "þ"
    End If
End If
End Sub

vong lập if end if

Nhưng khi bạn chọn một lúc nhiều ô thì nó sẽ báo lỗi để khắc phục điều này ta dùng thêm câu lệnh. Trước If Target.Value ta dùng câu lệnh If Target.Count > 1 Then Exit Sub thì khi ta tích nhiều ô vẫn ok.

chọn nhiều ô

Tô Đậm những ô có dấu tích.

Đầu tiên copy ký tự có checkbox lúc đầu tạo ra -> bôi đen vùng dữ liệu rồi vào Home -> Conditional Formatting -> New Rule.

tô đậm ô cần tích

Cửa sổ hiện ra chọn dòng cuối cùng trong Select a rule type -> trong ô Format values gõ = tích vào ô đầu tiên trong checkbox sau đó bấm f4 hai lên để có dấu $ đứng trước(vd:=$B6) rồi =" dán ô lúc nãy bạn copy vào đây" và chọn Format.

đổi màu checkbox

Chọn Bold -> Fill chọn màu sau đó ok. Kết quả.

tô ô có tích

Tạo Checkbox để chọn All.

Vào Developer -> Insert -> chọn hình có checkbox -> tích ra 1 ô bất kỳ sau đó xóa tên nó đi giữ lại ô checkbox -> kích chuột phải vào ô checkbox kéo nó vào ô chọn all.

tao checkbox

Tích vào checkbox copy(ctrl+c) tên checkbox ở góc trên bên trái màng hình -> mở Visual Basic lên tích vào Sheet1 -> Insert -> Module.

copy checkbox

Bắt đầu viết code mở đầu là Sub tên chương trình (chon_all) enter để nó tự tạo ra End Sub -> mình gõ MsgBox Sheet1.CheckBoxes("tên checkbox mình tạo lúc nãy"). vd:MsgBox Sheet1.CheckBoxes("Check Box 1").
Cho chạy chương trình khi mình chưa tính vào checkbox thì nó sẽ hiện -4146 tích vào checkbox thì hiện 1.

all checkbox

Nháy chuột phải vào checkbox chọn Format Control -> cửa sổ hiện ra chọn Mixed -> ok

tao all

Vào Module sữa Hàm MsgBox thành If Sheet1.CheckBoxes("Check Box 1").Value = 1 Then 
Viết thêm lệnh  Sheet1.Range("B6:B21").Value = "þ" B6-B21 là vùng checkbox, "þ" là copy mã của checkbox có dấu tích.
Tiếp theo là Else và copy Sheet1.Range("B6:B21").Value = "þ" sửa "þ" thành "¨" bằng cách ra copy checkbox không có dấu tích.

Đoạn Code:

Sub Chon_all()

    If Sheet1.CheckBoxes("Check Box 1").Value = 1 Then
        Sheet1.Range("B6:B21").Value = "þ"
    Else
        Sheet1.Range("B6:B21").Value = "¨"
    End If
End Sub

Khi viết xong bạn tích chuột phải vào Checkbox chọn Assign Macro -> tích vào Chon_all -> ok.

tạo button

kết quả 

kết quả

Bài tiếp theo >> VBA Excel Cấp Tốc Bài 9 - Tự Tạo Hàm Excel Riêng

CHO ĐIỂM BÀI VIẾT NÀY

vote data
TOP