본문 바로가기

EXCEL/VBA

엑셀 셀병합 단축키(그룹별 병합 및 해제)

엑셀에서 자주 쓰는것  중에 하나가 셀병합입니다. 그런데 셀병합을 하다보면 2가지의 문제점(?)이 있습니다.

첫번째는 바로가기 단축키가 없다는 것입니다.

두번째는 그룹별 병합을 한번에 할 수 있는 방법이 없다는 것입니다.


셀병합 + 병합해제 + 그룹별 병합 = 단축키(Ctrl+m)로 한번에 알아서 해주는 매크로를 올립니다.

그냥 아무생각 없이 이 글을 따라 해보면 금방 멋진 셀병합 매크로를 만들 수 있습니다.


<단축키를 설정하여 실행>



 단축키 설정방법



1. 리본메뉴의 [개발도구] - [매크로 기록]을 선택합니다.



2. [매크로 이름]에 "자동셀병합해제"라고 입력합니다. (이름은 사용자가 아무렇게나 붙여도 됩니다.)

3. [바로가기 키]에 "m"을 입력합니다.(Merge의 첫자)

4. [매크로 저장위치]를 개인용 매크로 통합문서를 선택합니다.(다른 문서에서도 단축키를 사용하기 위함)


5. [개발도구] - [기록 중지]를 선택합니다.


6. [단축키 Alt + F11] 해서 Visual Basic Editor 창을 엽니다.

7. 좌측 프로젝트 창에서 ①과 같이 PERSONAL.XLSB 가 생겼습니다.

8. ② 의 Module1을 더블클릭하면 우측의 Sub 자동셀병합해제() 프로시저가 열립니다.

9. 첨부한 코드를 ③의 위치에 복사해서 붙여넣기 합니다.


자동셀병합해제 코드.txt


10. [저장] 합니다. 끝 입니다.


 코드설명


여기서 부터는 VBA에 관심 있는 분만 보세요. ^^

저는 엑셀을 좋아라 하는 사람이지만 프로그래머는 아니라서 변수는 전부 한글로 입력했습니다.

영어로 변수를 정하면 변수명 만들때도 고민이 많아지고 나중에 확인 할때도 어려워서요. 이해 바랍니다.


Sub 자동셀병합해제()

On Error Resume Next


Dim c, 선택범위 As Range

Dim 판단1, 판단2 As Boolean

Dim 병합행, 병합열 As Integer

Dim r As Integer


Set 선택범위 = Selection


Application.DisplayAlerts = False '---① 병합시 나타나는 경고 해제


    For Each c In 선택범위 '---② 선택범위 내에 병합된 셀이 있을때 병합해지 용

        병합행 = c.MergeArea.Rows.Count '---③ 병합범위의 행 크기 파악

        병합열 = c.MergeArea.Columns.Count '---④ 병합범위의 열 크기 파악

        

        If 병합행 > 1 Or 병합열 > 1 Then  '---⑤ 병합범위가 1보다 크면 병합셀이 있다는 의미

            With Selection

                .HorizontalAlignment = xlGeneral '---⑥ 수평정렬을 좌측으로

                .UnMerge  '---⑦ 병합해제

            End With

            Exit Sub

        End If

    Next c

    

    If 선택범위.Columns.Count = 1 Then '---⑧ 선택범위가 1개 열인 경우

        For Each c In 선택범위

            판단1 = c = c.Offset(1, 0) Or c.Offset(1, 0) = ""

            판단2 = c.Row < 선택범위.Row + 선택범위.Rows.Count - 1

            

            If 판단1 And 판단2 Then '---⑨ 병합그룹 판단이 True 일때

                r = r + 1

            Else

                c.Offset(-r, 0).Resize(r + 1, 1).Merge '--- ⑩ 그룹별 병합

                r = 0

            End If

        Next c

    Else '--- ⑩ 선택범위가 2개 열 이상인 경우

        With Selection

            .HorizontalAlignment = xlCenter '---⑪ 수평정렬 가운데

            .Merge '---⑫ 병합

        End With

    End If

    

Application.DisplayAlerts = True '---⑫ 경고 표시


End Sub


1. ①은 아래 그림의 경고 메세지가 나타나지 않도록 하기 위해 입력합니다. (친숙한 경고죠?)



2. ⑥과 ⑪ 에서 HorizontalAlignment 는 수평 정렬 Range 속성으로 필요에 딸라 조정하시면 됩니다.

3. 그룹병합에서는 보통 좌측정렬을 해서 수평정렬 속성을 코딩하지 않았습니다.

4. ①이 있으면 ⑫는 반드시 입력하셔야 합니다. 그렇지 않은 경우 문제 어떤 경고창도 나타나지 않습니다. 



 관련글 보기


 단축키 모음

  

 특수문자 단축키 만들기

  

 개발도구 표시하기