본문 바로가기
엑셀/VBA

[엑셀]VBA로 체크박스 자동으로 연결하기

by 이지블로그 2020. 10. 5.

저번에도 다뤘던 내용인데 지난번 내용이 궁금하다면 [엑셀] VBA-체크박스 사용법과 자동으로 셀에 연결하기 링크를 클릭해서 보고 오시고 이번에는 다른 방법으로 연결하는 법입니다.

 

먼저 저번 글과 가장 큰 차이점은

이런 식으로 박스형으로 만들 수 있다는 점입니다. 저번에 단순히 세로로 쭉 내려왔던 것과는 다르게 체크박스의 위치 정보를 이용하기 때문인데요 바로 시작하겠습니다.

먼저 위처럼 박스형으로 체크박스를 만들겠습니다.

 

체크박스를 삽입할 때 꿀팁은 아래와 같은 방법으로 체크박스를 모두 선택해 복사, 붙여 넣기를 하면 편리합니다.

 

ctrl+g 옵션 개체 확인

그럼 이제 VBA를 사용해 봅시다.

 

Sub 체크박스연결()
    Dim Ch As CheckBox
    Dim i As Long
    Dim Whe As String
    i = 1
    For Each Ch In ActiveSheet.CheckBoxes
        Whe = Ch.TopLeftCell.Address
        Ch.LinkedCell = "Sheet2!" & Whe
        i = i + 1
    Next
    ActiveSheet.CheckBoxes = True
End Sub

위와 같이 치시면 되는데 설명해드리겠습니다.

 

먼저 Ch를 체크박스로 변수를 선언하고 i를 숫자로 Whe를 문자로 선언합니다.

 

그리고 현재 활성화된 시트에 체크박스에 대하여 각각 For 구문을 실행합니다.

Whe에 각 체크박스의 왼쪽 모서리 위치를 입력합니다.(체크박스는 sheet1에 위치)

각 셀에 입력된 값의 sheet2번 좌표를 각 체크박스에 연결합니다.

모든 체크박스를 Ture 상태로 만듭니다.

 

자 이처럼 동작하는데요. 여기서 sheet2는 연결하고 싶은 시트를 말하고 원하는 대로 바꿔도 됩니다.

체크박스의 모서리 위치를 좌표로 받기 때문에 모서리가 원하는 셀에 위치해 있는지 꼭 확인하세요.

왼쪽 모서리가 셀안에 위치

 

같은 시트에 셀을 연결하고 싶다면

 For Each Ch In ActiveSheet.CheckBoxes
        Whe = Ch.TopLeftCell.Address     
        Ch.LinkedCell = "Sheet2!" & Whe
        i = i + 1
Next

대신

For Each Ch In ActiveSheet.CheckBoxes
    Ch.LinkedCell = Ch.TopLeftCell.Offset(세로로 이동하고 싶은 값, 가로로 이동하고 싶은 값)
    i = i + 1
Next
를 사용하면 같은 시트에 Offset(이동)된 위치가 연결됩니다.

offset(10,0)을 한 경우

저도 예전에 자동 연결하는 법을 찾다고 못 찾아서 고민하고 직접 코드를 짜서 이런 식으로 할 수 있었습니다.

여러분은 이것보다 더 간단한 방법도 만들 수 있으니 단순히 복사해서 쓰지 말고 이런 식으로 하면 어떨까 하면서 여러 가지 방법으로 해보시길 권장드립니다.

 

VBA에 대해 궁금하거나 막히는 점이 있다면 댓글로 달아주세요.

반응형