Excel - VBA

[VBA] CheckBox를 쉽게 이용하자

EGTools 2023. 11. 26. 16:08
728x90

Excel 양식에 CheckBox를 넣으려면 양식도구를 이용해서 추가하여 사용하는데,

실제로 일반 사용자가 사용하기에는 익숙하지 않은 도구입니다.

 

이를 위하여 사용자가 쉽게 CheckBox를 셀에서 사용할 수 있도록 해 봅니다.

이 기능은 Microsoft 365에서 기본기능으로 추가할 예정인 것을 미지원 버전에서 사용할 수 있도록 모사 구성한 것입니다.

https://insider.microsoft365.com/en-us/blog/simplify-data-entry-and-reduce-errors-with-checkboxes-in-cells

 

EGTools를 사용하시는 분은 v3.9.5에서 지원하기 때문에 중복으로 사용시 문제 발생할 수 있습니다.

 

기본적인 아이디어는 셀서식중 조건을 반영할 수 있는 것을 기준으로

1=Check, 0=Uncheck를 설정하고, 해당하는 문자를 Unicode에서 넣어 주는 것입니다.

적용 셀서식 : [=1]"☑";[=0]"⬜";""

추가하는 김에 유효성 검사에 0과 1만 넣을 수 있도록 추가합니다.

 

이를 사용자기 쉽게 사용할 수 있도록 Excel 리본메뉴에 추가하여

선택영역에 CheckBox 셀서식을 적용하는 매크로를 넣습니다.

Private Sub ApplyCheckBox()
    Dim sNumFmt As String, c As Range
    If TypeName(Selection) <> "Range" Then Exit Sub
    sNumFmt = Selection.Cells(1, 1).NumberFormat
    If InStr(1, sNumFmt, ChrW(9745)) And InStr(1, sNumFmt, ChrW(11036)) Then
        ''//Selection.NumberFormat = "General"
    Else
        For Each c In Selection.Cells
            If IsEmpty(c) Then
                With c
                  .Validation.Delete
                  .Validation.Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:="0", Formula2:="1"
                  .NumberFormat = "[=1]""" & ChrW(9745) & """;[=0]""" & ChrW(11036) & """;"""""
                  .Value = 0
                  .HorizontalAlignment = xlCenter
                End With
            End If
        Next c
    End If
End Sub

 

추가로,  리본메뉴에서 호출 할 수 있도록 CallBack 함수를 작성합니다.

Public Sub rbnApplyCheckBox(control As IRibbonControl)          '체크박스 적용/해제
    ApplyCheckBox
End Sub

 

그리고, 적용된 셀을 더블클릭했을 때에 상태를 변경시키는 이벤트 매크로를 추가합니다.

아래 매크로는 "현재_통합_문서" 모듈에 추가하여야 합니다.

값이 1이나 0일 때는 값을 서로 바꿔주고, 나머지는 무시합니다.

이벤트 매크로에서 Cancel = True로 설정하면 셀을 더블클릭했을 때에 수정상태로 진입하지 않게 됩니다.

Private Sub Workbook_SheetBeforeDoubleClick(ByVal sh As Object, ByVal Target As Range, Cancel As Boolean)
    '// CheckBox 적용 관련
    Dim sNumFmt As String, vVal As Variant
    sNumFmt = Target.Cells(1, 1).NumberFormat
    If InStr(1, sNumFmt, "[=1]") And InStr(1, sNumFmt, "[=0]") Then
        If Target.Cells.HasFormula Then GoTo EXIT_RUN '//수식적용일 경우 동작금지
        vVal = Target.Cells(1, 1).Value2
        Select Case vVal
        Case 0: Target.Cells(1, 1) = 1: Cancel = True
        Case 1: Target.Cells(1, 1) = 0: Cancel = True
        Case Else:
        End Select
    End If
    
EXIT_RUN:
    
End Sub

 

주의할 점은 이 기능을 사용하면 Excel의 되돌리기(Undo) 기능이 매우 제한됩니다.

- CheckBox 메뉴 버튼을 눌러 셀서식을 변경한 경우

- 각 셀을 더블클릭하여 상태를 변경한 경우

상기 2가지 작업이 수행되는 즉시 되돌리기(Undo) 이력이 모두 삭제 됩니다.

 

체크박스를 이용할 때에는 더블클릭으로 체크(☑)와 체크해제(⬜)를 변경할 수 있으며

셀에 직접 입력시 1을 입력하면 체크, 0을 입력하면 체크해제가 됩니다.

여러 셀을 입력할 때에는 Ctrl키를 누른채로 여러 셀을 선택후, 1을 넣고, Ctrl+Enter로 입력하세요.

 

 

체크박스 적용을 해제하려면 [홈]탭의 "편집"부분에 있는 "지우기 - 시식 지우기"를 선택하면 일반 셀로 전환됩니다.

 

 

이 기능은 EGTools v3.9.5에 추가되었으며,  단독으로 사용 가능한 샘플을 첨부합니다.

 

CheckBoxHelper.xlam
0.03MB

 

728x90