확인란(양식 컨트롤)으로 체크리스트 만들기: ChatGPT로 자동 연결까지 완성!
참석 여부나 체크리스트를 표시할 때 보통은 O, X를 입력하거나 √ 같은 특수문자를 넣는 경우가 많습니다.
하지만 이런 방식은 입력이 번거롭고, 사용자마다 다르게 입력해 수식 계산이나 조건부 서식에서 오류가 생기기 쉽죠.
이럴 때 확인란(Checkbox)을 사용하면 클릭 한 번으로 체크 여부를 표시할 수 있고, TRUE/FALSE 값이 자동으로 입력돼 실무에서도 훨씬 편리합니다.
다만, 셀 안에 확인란을 넣는 새로운 형태의 체크박스 기능은 M365 버전 중 2023년 11월 이후 업데이트된 Excel에서만 지원됩니다.
그 외 버전에서는 사용할 수 없어요. 그래서 이번 글에서는 어떤 버전에서도 활용할 수 있는 [개발 도구] 탭의 ‘폼 컨트롤 확인란’ 사용법을 소개하려고 합니다.
✔️ M365 새 확인란 기능이 궁금하다면 아래 쇼츠 영상에서 확인해 보세요!
https://youtube.com/shorts/Xc8tLQoLCtI
실습 파일 다운로드
완성 파일 다운로드
[개발 도구] 탭에서 확인란 추가하기
1. [개발 도구] 탭 - [컨트롤] 그룹 - [삽입] - [확인란(양식 컨트롤)]을 선택한 후 [C3] 셀을 클릭합니다.
2. 삽입된 확인란 선택하고 체크 박스만 남기고 글자는 지웁니다. 그리고 크기를 줄여 [C3] 셀에 보기 좋게 배치합니다.

엑셀에서 확인란(체크박스)을 삽입하고 나면, 처음엔 크기나 위치를 조절할 수 있어요. 그런데 한 번 마우스를 다른 셀로 옮겼다가 다시 클릭하면 선택되는 게 아니라 체크만 되죠?
이럴 땐, [홈] 탭 - [편집] 그룹 - [찾기 및 선택] - [개체 선택] 메뉴를 클릭하면 끝!
이제 확인란 위를 클릭해도 체크가 되지 않고 개체 자체가 선택됩니다. 그럼 크기를 조정하거나 위치를 바꾸는 작업이 훨씬 쉬워져요! [ESC] 키를 누르면 '개체 선택' 모드가 해제됩니다.
참고로 개체를 더 정밀하게 움직이고 싶을 땐 마우스 대신 방향키(←↑→↓)를 누르면 됩니다.
3. 채우기 핸들에 마우스를 맞추고 드래그해 확인란을 모두 채웁니다.
4. 확인란에서 마우스 오른쪽 버튼을 눌러 [컨트롤 서식]을 선택합니다.
5. [컨트롤 서식]이 실행되면 셀 연결 입력 창에 커서를 두고 [C3] 셀을 선택합니다.
6. [C3] 셀의 확인란에 체크 표시가 되어 있어 연결된 [C3] 셀에 'TRUE'가 표시됩니다.
셀 연결을 하는 이유는 체크 표시가 되었는지 유무를 판단하기 위해서입니다. 이후 해당 일자에 체크 표시가 되었는지 확인한 후 체크 표시(TRUE) 된 개수를 구해 참석률을 구하는 수식을 작성할 수 있는 거죠!
확인란, 이렇게 복사하면 안 됩니다!
확인란을 여러 개 삽입해야 할 때, 하나하나 셀에 연결하는 건 너무 번거롭죠. 그래서 보통은 확인란 하나에만 셀을 연결해두고, 그걸 아래로 쭉~ 복사(채우기) 해서 쓰는 경우가 있는데, 이렇게 하면 문제가 생깁니다!
아래 그림처럼 확인란을 삽입하고 셀 하나에만 연결한 다음, 그걸 복사해서 여러 셀에 붙여 넣으면 어떻게 될까요? 한 개만 체크해도 모든 확인란이 한꺼번에 체크됩니다!
왜냐하면 복사된 확인란들이 모두 같은 셀에 연결되어 있기 때문입니다. 겉보기엔 따로 있는 것처럼 보여도, 실제론 하나의 셀만 보고 작동하는 거죠! 그래서 확인란을 복사할 때는 반드시 각 확인란마다 연결된 셀을 따로 지정해 줘야 합니다. 이럴 때 VBA를 사용됩니다.
각 확인란을 자신의 셀에 자동 연결
확인란이 몇 개 안 되면 직접 셀 연결을 할 수 있지만 현재 시트에는 확인란이 많아 일일이 연결하는 것은 효율적이지 못합니다. 그래서 아래 VBA 코드를 사용해 자동으로 연결되도록 설정해 보겠습니다.
Sub 연결_확인란_셀_자동설정()
Dim chkBox As CheckBox
Dim targetCell As Range
' 현재 시트의 모든 폼 컨트롤 확인란 순회
For Each chkBox In ActiveSheet.CheckBoxes
' 확인란의 왼쪽 위 좌표에 있는 셀을 가져옴
Set targetCell = chkBox.TopLeftCell
' 확인란을 해당 셀에 연결
chkBox.LinkedCell = targetCell.Address
Next chkBox
MsgBox "모든 확인란이 자신의 셀에 연결되었습니다!", vbInformation
End Sub
1. <Alt + F11>을 눌러 VBA 코드 창을 실행합니다. 그리고 [삽입] - [모듈]을 선택합니다.
2. 위 코드를 붙여 넣고 [실행]을 누릅니다.
3. 메시지 창이 실행되면 [확인]을 누릅니다.
4. 다시 <Alt + F11>을 눌러 Excel 창으로 전환한 후 확인란에 체크 표시해 보면 확인란이 있는 자신의 셀에 체크 결과인 TRUE가 표시됩니다. 제대로 처리가 되었네요!
5. 확인란만 표시되고 글자는 보이지 않도록 글자 색을 흰색으로 변경합니다.
VBA를 몰라도 걱정 마세요! ChatGPT가 도와줍니다
VBA를 몰라도 괜찮아요. 이런 상황에서는 ChatGPT의 도움을 받으면 쉽게 해결할 수 있습니다.
아래는 ChatGPT에게 실제로 질문했던 내용이에요.
먼저 현재 작업 중인 화면을 캡처한 후, 어떤 결과를 원하는지 구체적으로 설명하면 정확한 답변을 받을 수 있어요.
코드 설명도 궁금하다면 ChatGPT에게 질문해 보세요. 아래 내용은 ChatGPT에게 부탁한 설명입니다. 초보자를 대상으로 아주 상세한 설명을 부탁했습니다. 필요하신 분들은 참고하세요.
Sub 연결_확인란_셀_자동설정()
Dim chkBox As CheckBox
Dim targetCell As Range
For Each chkBox In ActiveSheet.CheckBoxes
Set targetCell = chkBox.TopLeftCell
chkBox.LinkedCell = targetCell.Address
Next chkBox
MsgBox "모든 확인란이 자신의 셀에 연결되었습니다!", vbInformation
End Sub
1️⃣ Sub 연결_확인란_셀_자동설정()
이 코드는 VBA에서 하나의 작업 덩어리(매크로)를 만들겠다는 선언입니다.
이름은 연결_확인란_셀_자동설정으로, 확인란과 셀을 연결하는 작업임을 알 수 있게 지은 거예요.
Sub로 시작하는 구문은 End Sub까지 한 덩어리로 실행됩니다.
2️⃣ Dim chkBox As CheckBox
변수 chkBox를 선언합니다.
이 변수는 코드에서 시트에 있는 확인란 하나하나를 담는 임시 그릇 역할을 합니다.
나중에 For Each 반복문에서 확인란을 하나씩 꺼내서 이 변수에 담게 됩니다.
3️⃣ Dim targetCell As Range
두 번째 변수인 targetCell은 확인란이 위치한 셀을 기억하기 위한 변수입니다.
Range는 엑셀에서 셀 또는 셀 영역을 다룰 때 사용하는 자료형입니다.
4️⃣ For Each chkBox In ActiveSheet.CheckBoxes
이 줄이 반복문의 시작입니다.
쉽게 말해, 현재 시트(ActiveSheet)에 있는 모든 확인란(CheckBoxes)을 하나씩 꺼내서
chkBox라는 변수에 담고, 반복해서 처리하겠다는 뜻이에요.
🧠 For Each 문이 뭐예요?
- For Each는 VBA에서 “목록 안의 항목들을 하나씩 반복해서 처리할 때” 사용하는 반복문입니다.
- 여기서는 CheckBoxes라는 확인란 묶음 안에서 하나씩 꺼내는 역할을 합니다.
- Excel에 10개의 확인란이 있다면, 이 반복문은 10번 돌면서 각 확인란에 대해 아래 코드를 실행하게 됩니다.
이 구조는 실무 자동화에서 자주 사용되며,
특히 도형, 차트, 컨트롤 객체 등 여러 개의 엑셀 개체를 반복 처리할 때 매우 유용합니다.
5️⃣ Set targetCell = chkBox.TopLeftCell
지금 반복 중인 확인란(chkBox)이 위치한 셀을 찾는 코드입니다.
TopLeftCell은 말 그대로 확인란의 왼쪽 위 모서리가 겹치는 셀을 반환합니다.
이 셀을 targetCell에 저장해두고, 다음 줄에서 확인란과 연결할 때 사용합니다.
6️⃣ chkBox.LinkedCell = targetCell.Address
이 줄이 핵심입니다.
확인란과 targetCell에 저장된 셀을 연결하는 작업입니다.
LinkedCell은 확인란과 연결된 셀 주소를 뜻하고,
Address는 해당 셀의 실제 주소(A1, B2 등)를 텍스트로 반환해 줍니다.
이렇게 연결되면,
- 사용자가 확인란을 체크하면 연결된 셀에 TRUE가 입력되고,
- 체크를 해제하면 FALSE로 바뀝니다.
- 반대로 셀에 직접 TRUE를 입력해도 체크박스가 자동으로 체크되죠.
7️⃣ Next chkBox
For Each 반복문의 끝입니다.
다음 확인란으로 넘어가서 같은 작업을 다시 반복합니다.
8️⃣ MsgBox "모든 확인란이 자신의 셀에 연결되었습니다!", vbInformation
모든 확인란이 처리된 후, 사용자에게 알림 창을 띄우는 코드입니다.
vbInformation은 느낌표 모양의 정보 아이콘과 함께 메시지를 보여주어, 완료되었음을 명확하게 알려줍니다.
ChatGPT가 정말 상세하게 설명을 해 주네요. ㅎㅎ
COUNTIF 함수로 참석률 구하기
확인란에 체크 표시하면 연결된 셀에 TRUE가 표시됩니다. TRUE 개수를 세면 참석일 수가 구해지겠죠? 이렇게 구한 참석일에 전체 참석일을 나누면 참석률이 구해집니다.
1. 조건에 맞는 개수를 구하는 COUNTIF 함수를 사용해 TRUE 개수를 구하는 수식을 작성합니다.
=COUNTIF(C3:F3,TRUE)
2. 정확하게 4 구해졌죠?
3. 참석률을 구한 [G3] 셀을 더블클릭해 수식을 수정합니다.
=COUNTIF(C3:F3,TRUE)/4
결과가 구해지면 마우스 오른쪽 버튼을 눌러 [백분율]을 적용합니다.
4. 수식을 복사해 나머지 참석률도 구합니다.
VBA 코드가 삽입된 엑셀 문서 저장하기
매크로 코드를 삽입한 엑셀 파일은 반드시 'Excel 매크로 사용 통합 문서 (*.xlsm)'로 저장해야 합니다. 만약 일반. xlsx 형식으로 저장하면 VBA 코드가 작동하지 않고, 저장할 때도 코드가 사라지게 되니 주의하세요!
