엑셀 체크박스 셀 연결 일괄 적용 방법(매크로)

2023. 3. 16. 12:39 / 서기랑

 엑셀의 체크박스(확인란)는 수식에 바로 사용할 수 없지만, 셀 연결 설정을 하면 그 값을 수식에 사용할 수 있다.

 체크박스와 셀 연결은 체크박스의 컨트롤 서식에서 할 수 있는데 일괄로 적용하는 방법은 없기 때문에 설정을 해야 할 체크박스가 너무 많다면 일괄 적용이 가능한 매크로를 만들어서 실행하는 것이 여러모로 편하다.

목차 (Contents)

     

    엑셀 체크박스 셀 연결 일괄 적용 하기(매크로)

    1. vba 실행.

     엑셀에서 [ALT + F11]을 눌러 vba를 실행하자.

     

    2. 새 모듈 만들기.

     vba 창이 열리면 상단 메뉴에서 [삽입 -> 모듈]을 클릭하여 새 모듈을 만든 뒤 아래의 코드를 붙여 넣자.

    Sub CheckBoxLink()
     Dim cb As checkBox
     Dim selectedRange As Range
     Dim linkedCell As Range
     Dim linkedCells As String
     Set selectedRange = Application.Selection

     For Each cell In selectedRange.cells
      linkedCells = ""
      For Each cb In cell.Parent.CheckBoxes
       If cb.TopLeftCell.Address = cell.Address Then
        Set linkedCell = cb.TopLeftCell.Offset(0, 1)
        If Not linkedCell Is Nothing Then
         If linkedCells Like "*" & linkedCell.Address & "*" Then
          MsgBox "중복된 연결 셀이 존재합니다: " & linkedCell.Address
         Else
          linkedCells = linkedCell.Address
          cb.linkedCell = linkedCell.Address
         End If
        End If
       End If
      Next cb
     Next cell
    End Sub

    엑셀 매크로 실행

    3. 매크로 실행.

     코드를 붙여넣었다면 체크박스가 있는 셀을 범위로 선택하고 매크로를 실행하면 된다.

     (체크박스를 선택하는 것이 아닌 셀을 범위로 선택)

    체크박스 매크로

    4. 매크로 설명.

     해당 매크로는 선택한 셀 범위 안에 체크박스가 있으면 체크박스가 있는 셀의 오른쪽 셀과 연결해 주는 매크로이다.

     선택한 범위안에만 있으면 모든 체크박스가 일괄로 셀 연결이 되며, 혹시나 체크박스의 범위가 겹쳐서 중복으로 셀 연결이 되면 메시지 박스가 나타나도록 해봤다.

     

     코드가 실행 되는 방식은 선택한 범위의 셀에서 체크박스가 있는지 순서대로 확인하는 방식이기 때문에 사실상 그다지 바람직한 코드는 아니다.

     엑셀 2010에서 실행이 되도록 해야 했고, 중복 체크 부분을 넣다 보니 어쩔 수 없었던 부분으로 매크로를 실행할 때는 시트 전체를 선택하지 말고 드래그로 대충 범위를 선택하고 실행하자.

     (검색해보면 효율 좋은 코드는 더 많이 있다.)

     

     기본적으로 셀 연결은 체크박스 옆의 셀로 지정했지만 코드의 Set linkedCell = cb.TopLeftCell.Offset(0, 1) 부분에서 마지막 부분의 숫자를 변경하면 연결 셀의 위치를 변경할 수 있다.

     

    그 외 내용

     검색해보면 더 좋은 매크로들이 많이 있긴 하지만 어차피 체크박스를 어마어마하게 만들어서 엑셀 문서를 작성하는 것이 아닌 이상 해당 매크로도 사용에는 크게 문제가 없을 것이다.

     아니면 이런 코드도 있구나 정도로 보거나 다른코드를 만드는데 참고해도 좋지 않을까 한다.