EXCEL VBA

엑셀 VBA 체크박스 넣고, 셀 연결 자동으로 하기

카루루1007 2023. 11. 30. 22:03
728x90
반응형
SMALL

[ 들어가며 ]

 

영문판 엑셀은 체크박스를 넣으면, 

셀 연결까지 자동으로 되는 것 같은데

한글판 엑셀은 자동으로 연결이 되지 않는 것 같아

간단한 VBA 코드를 만들어 보았습니다.

 

해당 코드는 아래와 같이 작동합니다.

 

1. 체크박스를 넣을 셀 범위를 선택한다.

2. VBA 코드를 실행시킨다.

3. 선택한 셀 범위에 체크박스가 표시되고

4. 셀 연결이 자동으로 된다.

5. 체크박스의 텍스트를 없애고,

6. TRUE와 FALSE로 표시되는 셀 값을 보이지 않게 한다.

 

아래 그림은 간단한 예시로 만든 것입니다.

체크박스를 체크하면 진행상태가 변화합니다.

 

여기서는 진행상태 부분은 제외하고

체크박스를 넣고 셀 연결까지 자동으로 하는 코드를 

살펴보겠습니다.

 

[ 코드 작성하기 ]

 

먼저 기본적인 코드입니다.

Sub AddCheckBoxes()
    Dim Rng As Range
    Dim Cell As Range

	Set Rng = Application.Selection

    For Each Cell In Rng.Cells
        Dim Chk As CheckBox
        Set Chk = ActiveSheet.CheckBoxes.Add(Cell.Left, Cell.Top, Cell.Width, Cell.Height)
        Chk.LinkedCell = Cell.Address
    Next Cell
End Sub

코드를 보면

선택된 셀 범위를 [ Rng 변수 ]에 담습니다.

 

선택된 범위의 셀을 하나씩 선택하며

체크박스를 넣고

체크박스에 현재 셀의 주소를 연결합니다.

 

이 코드를 실행하면 다음과 같이 결과가 나타납니다.

 

체크박스를 만들면 나타나는 

[ 확인란 00 ]을 지워야 겠습니다.

 

코드 한줄만 추가해주시면 됩니다.

Chk.Text = ""

아래는 전체 코드입니다.

Sub AddCheckBoxes()
    Dim Rng As Range
    Dim Cell As Range

	Set Rng = Application.Selection

    For Each Cell In Rng.Cells
        Dim Chk As CheckBox
        Set Chk = ActiveSheet.CheckBoxes.Add(Cell.Left, Cell.Top, Cell.Width, Cell.Height)
        Chk.LinkedCell = Cell.Address
        Chk.Text = ""       
    Next Cell
End Sub

 

이 코드를 실행하면 다음과 같이 결과가 나타납니다.

 

728x90
반응형

여기서 체크박스를 가능하면 셀 중앙에 위치시키고 싶었습니다.

그래서 체크박스의 위치를 조정하였습니다.

아래 코드를 추가하면 됩니다.

각 줄의 맨 뒤에 있는 숫자를 변경해가며

체크박스가 셀의 중앙에 오도록 조절합니다.

Chk.Height = Cell.Height * 0.6
Chk.Width = Cell.Width * 0.6
Chk.Top = Cell.Top + (Cell.Height - Chk.Height) / 2
Chk.Left = Cell.Left + (Cell.Width - Chk.Width) / 1.1

 

다음은 전체 코드입니다.

Sub AddCheckBoxes()
    Dim Rng As Range
    Dim Cell As Range

	Set Rng = Application.Selection

    For Each Cell In Rng.Cells
        Dim Chk As CheckBox
        Set Chk = ActiveSheet.CheckBoxes.Add(Cell.Left, Cell.Top, Cell.Width, Cell.Height)
        Chk.LinkedCell = Cell.Address
        Chk.Text = ""      
        
        Chk.Height = Cell.Height * 0.6
        Chk.Width = Cell.Width * 0.6
        Chk.Top = Cell.Top + (Cell.Height - Chk.Height) / 2
        Chk.Left = Cell.Left + (Cell.Width - Chk.Width) / 1.1
    Next Cell
End Sub

이 코드를 실행하면

체크박스가 셀의 중앙에 위치하게 됩니다.

 

마지막으로 체크박스에 체크를 했을 때 나타나는 

셀에 입력되는 값인 [ TRUE 와 FALSE ]를 

보이지 않도록 하겠습니다.

 

보이지 않게 하는 방법은

셀 배경의 색과 글자의 색을 똑같이 만들면 됩니다.

 

다음 코드 한줄을 추가하시면 됩니다.

Cell.Font.Color = Chk.Interior.Color

 

다음은 체크박스의 초기값을 설정하는 코드입니다.

초기값을 설정하지 않으면

TRUE 도 FALSE 도 아닌 값이 비어있는 상태가 됩니다.

Chk.Value = False

 

다음은 완성된 전체코드입니다.

Sub AddCheckBoxes()
    Dim Rng As Range
    Dim Cell As Range

	Set Rng = Application.Selection

    For Each Cell In Rng.Cells
        Dim Chk As CheckBox
        Set Chk = ActiveSheet.CheckBoxes.Add(Cell.Left, Cell.Top, Cell.Width, Cell.Height)
        
        Chk.LinkedCell = Cell.Address
        
        Chk.Text = ""      
        
        Chk.Value = False        
        
        Chk.Height = Cell.Height * 0.6
        Chk.Width = Cell.Width * 0.6
        Chk.Top = Cell.Top + (Cell.Height - Chk.Height) / 2
        Chk.Left = Cell.Left + (Cell.Width - Chk.Width) / 1.1
        
        Cell.Font.Color = Chk.Interior.Color
    Next Cell
End Sub

 

이제 위 코드를 실행하면

체크박스는 셀의 중앙에 위치하고

체크를 하면 [ TRUE ] 값을 가지게 되나

그 값이 보이지는 않게 됩니다.

 

해당 코드는 체크박스를 자주 사용하시는 분께는 유용할 것입니다.

728x90
반응형
LIST