엑셀 행/열 자동맞춤, 원클릭으로 해결하기
간단한 매크로를 활용하여 나만의 행/열 자동맞춤 리본버튼 만들기!
이 강의에서는 매크로 녹화와 개인용 매크로 통합 문서를 활용해 행과 열의 크기를 셀 값에 맞춰 자동으로 정렬하는 매크로를 직접 만드는 방법을 다룹니다. 작성한 매크로를 리본 메뉴에 버튼으로 등록하면, 작업 중 언제든 클릭 한 번으로 모든 시트에서 일관된 셀 정렬을 적용할 수 있습니다.
실습자료를 준비했어요
수업에서 사용한 예제 파일과 보충 자료를 한 곳에 정리했습니다!👇
엑셀 행 높이 자동 맞춤, 클릭 1번으로 해결하는 방법!
엑셀에서 셀에 입력된 값에 맞춰 행렬 크기를 자동으로 정렬하는 방법은 크게 3가지가 있습니다.
행 높이/열 넓이를 드래그하여 직접 조절하기
- 시트 화면의 머리글(알파벳 또는 숫자)을 클릭하여 변경하려는 전체 행 또는 열을 선택합니다.

- 마우스 커서를 선택된 행/열의 가장자리로 이동하면 커서가 좌우 화살표로 변경됩니다.

- 이 상태에서 마우스를 드래그하면 행 높이와 열 넓이를 자유롭게 조절할 수 있습니다.

여러 개의 행 높이/열 넓이를 한 번에 동일하게 변경하기
- 변경하려는 여러 개의 행 또는 열을 선택합니다. (Ctrl 키를 누른 채로 선택하면 떨어져 있는 행/열도 함께 선택할 수 있습니다.)

- 마우스 커서를 선택된 행/열의 가장자리로 이동한 뒤 드래그하면 여러 개의 행 높이/열 넓이가 한 번에 동일한 크기로 변경됩니다.

여러 개의 행 높이/열 넓이를 셀에 입력된 값에 맞춰 자동으로 변경하기
- 변경하려는 여러 개의 행 또는 열을 선택합니다.

- 마우스 커서를 선택된 행/열의 가장자리로 이동한 뒤, 좌우 화살표 모양으로 변경되면 마우스 왼쪽 버튼을 더블클릭합니다.

- 선택된 행 높이와 열 넓이가 셀에 입력된 값에 맞춰 자동으로 조절됩니다.

원클릭 행 높이 자동 맞춤 버튼 만들기
Microsoft 365 이전 버전에서는 행/열 넓이를 자동 맞춤할 때 셀 주변에 여백이 들어가지 않아 셀 간격이 매우 좁게 정렬되는 문제가 있었습니다. Microsoft 365 (2020년 7월 기준) 에서는 이 부분이 개선되어, 자동 맞춤 시 셀 주변에 적절한 여백이 들어가도록 변경되었습니다.
이번 강의에서는 엑셀 버전과 상관없이 버튼 클릭 한 번으로 원하는 여백을 적용하여 행 높이를 자동 맞춤하는 방법을 알아봅니다.
- 엑셀 화면 상단의 개발도구 - 매크로 기록, 또는 화면 좌측 하단의 매크로 녹화 버튼을 클릭합니다. 화면에 개발도구 탭이 보이지 않는다면 아래 개발도구 활성화 방법 관련 링크를 참고합니다.

- 매크로 기록 창이 나타나면 매크로 저장 위치를 '개인용 매크로 통합 문서'로 선택한 뒤 '확인'을 클릭합니다.

- 다시 개발도구에서 '기록 중지'를 클릭하거나, 화면 좌측 하단의 네모 버튼을 클릭하여 매크로 녹화를 중단합니다.

- 개발도구의 'Visual Basic' 버튼을 클릭하거나 단축키 Alt + F11을 눌러 매크로 편집기로 이동합니다.

- 프로젝트 창에서 PERSONAL.XLSB - 모듈 - Module1 을 더블클릭합니다.

- 기존에 녹화된 매크로를 모두 지운 뒤, 아래 명령문을 복사하여 모듈 안에 붙여넣기 합니다.
Sub 행열맞춤() On Error Resume Next Dim rng As Range Dim cGap As Long: cGap = 1 '<-- 좌우간격을 조절합니다. Dim rGap As Long: rGap = 3 '<-- 상하간격을 조절합니다. Selection.EntireColumn.AutoFit Selection.EntireRow.AutoFit For Each rng In Selection.Rows(1).Cells With rng .EntireColumn.ColumnWidth = .EntireColumn.ColumnWidth + cGap End With Next For Each rng In Selection.Columns(1).Cells With rng .EntireRow.RowHeight = .EntireRow.RowHeight + rGap End With Next End Sub
- 엑셀 화면으로 돌아온 뒤, 파일 - 옵션 - 리본 사용자 지정 - 홈의 [+] 버튼을 클릭합니다.

- 맞춤을 선택한 뒤 '새 그룹'을 추가합니다. 이어서 '이름 바꾸기'를 클릭하여 그룹 이름을 '행열맞춤'으로 변경합니다.

- 좌측의 명령 선택을 '매크로'로 변경한 뒤 '행열맞춤'을 선택합니다. '추가 >>' 버튼을 클릭하여 행열맞춤 매크로를 행열맞춤 그룹에 추가합니다.

- 추가된 매크로를 선택한 뒤, '이름 바꾸기' 버튼을 클릭하여 원하는 이름과 아이콘으로 변경합니다.

- '확인'을 눌러 옵션 창을 닫으면, 홈 탭에 '행열맞춤' 버튼이 추가됩니다.

- 이제 원하는 범위를 선택한 뒤 해당 버튼을 클릭하면 선택된 범위의 행 높이가 자동으로 맞춤됩니다.

자주 묻는 질문
Q1. 행 높이 자동 맞춤 기능으로 적용되는 여백을 조절할 수 있나요?
행열맞춤 명령문의 cGap 과 rGap 값을 조절하면 행렬 여백을 변경할 수 있습니다. cGap 은 좌우 간격, rGap 은 상하 간격을 의미하며, 값을 키울수록 셀 주변 여백이 넓어집니다.
Sub 행열맞춤() On Error Resume Next Dim rng As Range Dim cGap As Long: cGap = 1 '<-- 좌우간격을 조절합니다. Dim rGap As Long: rGap = 3 '<-- 상하간격을 조절합니다. Selection.EntireColumn.AutoFit Selection.EntireRow.AutoFit For Each rng In Selection.Rows(1).Cells With rng .EntireColumn.ColumnWidth = .EntireColumn.ColumnWidth + cGap End With Next For Each rng In Selection.Columns(1).Cells With rng .EntireRow.RowHeight = .EntireRow.RowHeight + rGap End With Next End Sub
Q2. PERSONAL.XLSB 통합 문서 사용을 중단하고 싶습니다. 어떻게 삭제하나요?
PERSONAL (개인용 매크로 통합 문서) 은 사용자 시작 위치에 자동 저장됩니다. 아래 순서에 따라 해당 경로로 이동하여 PERSONAL 통합 문서를 삭제할 수 있습니다.
- 파일 - 옵션 - 보안 센터 - 보안 센터 설정으로 이동합니다.

- 신뢰할 수 있는 위치 - Excel 기본 위치 : 사용자 시작 - '수정' 버튼을 클릭합니다.

- 표시된 경로를 복사한 뒤 엑셀을 종료합니다. (엑셀이 완전히 종료되어 있어야 PERSONAL 통합 문서를 삭제할 수 있습니다.)

- 윈도우키 + E로 파일 탐색기를 실행합니다. 복사한 경로를 탐색기 주소창에 붙여넣은 뒤, PERSONAL 통합 문서를 삭제합니다.

아쉽게도 해당 동작은 '뒤로가기'를 할 수 없습니다.ㅜ-ㅜ;
하지만, 만약 '셀 넓이'만 복구하는 작업이 필요하시다면, 기존의 셀 넓이만 따로 배열로 담아두었다가
필요 시 복구하는 방식으로 구현이 가능하겠습니다만...
셀 넓이만 복구 될 뿐, 그 이전 작업은 모두 사라지기 때문에 큰 의미가 없지 않을까 생각됩니다.^^;
답변이 도움이 되셨길 바랍니다.
화이팅입니다!(ง •̀_•́)ง
Dim arrw(16384) As Long
Dim arrh(1048576) As Long
Sub 행열맞춤()
On Error Resume Next
Dim a As Integer
Dim rng As Range
Dim cGap As Long: cGap = 1 '<-- 좌우간격을 조절합니다.
Dim rGap As Long: rGap = 3 '<-- 상하간격을 조절합니다.
i = 0
For Each rng In Selection.Rows(1).Cells
With rng
arrw(i) = .EntireColumn.ColumnWidth
i = i + 1
End With
Next
i = 0
For Each rng In Selection.Rows(1).Cells
With rng
arrh(i) = .EntireRow.RowHeight
i = i + 1
End With
Next
Selection.EntireColumn.AutoFit
Selection.EntireRow.AutoFit
For Each rng In Selection.Rows(1).Cells
With rng
.EntireColumn.ColumnWidth = .EntireColumn.ColumnWidth + cGap
End With
Next
For Each rng In Selection.Columns(1).Cells
With rng
.EntireRow.RowHeight = .EntireRow.RowHeight + rGap
End With
Next
canundo = True
End Sub
Sub Undo_행열맞춤()
On Error Resume Next
Dim i As Integer
Dim rng As Range
If canundo = False Then
MsgBox ("행열맞춤 실행 이력이 없습니다.")
canundo = flase
Exit Sub
End If
i = 0
For Each rng In Selection.Rows(1).Cells
With rng
.EntireColumn.ColumnWidth = arrw(i)
i = i + 1
End With
Next
i = 0
For Each rng In Selection.Columns(1).Cells
With rng
.EntireRow.RowHeight = arrh(i)
i = i + 1
End With
Next
canundo = flase
End Sub
만들어주신 행열맞춤 매크로에 UNDO매크로를 하나 더 만들어 단축키를 지정하여 사용하니 되돌아가기 기능이 되는데 같이 공유하고 싶습니다!!
각 넓이를 배열로 받아서 저장할 생각을 하지 못했었네요~~^^ 기능이 필요하신 많은 분들께 정말 큰 도움이 될 듯 합니다
혹시 이 방법도 아시면 알려주세요~
매크로는 실행 후 이전 단계로 되돌리기가 불가능합니다.
그런데 저는 해당 매크로를 사용하면 매크로가 적용되는 동시에 엑셀이 멈추면서 마우스 커서가 로딩중일 때 나오는 동그라미가 나옵니다. 아무리 기다려도 그대로 화면이 그대로 정지가 돼서 클릭을 하면 응답없음으로 바뀌어 결국 엑셀을 끄게되고 매크로를 사용 못하게 되네요. 해결 방법이 없을까요?
아래 적어드린 순서대로 한 단계씩 디버깅 해보시겠어요?
- 명령문의 시작부분, "Selection.EntireColumn.AutoFit" 를 클릭합니다.
- 키보드 F9 키를 눌러 중단점을 설정하세요.
- 행렬맞춤 매크로를 실행합니다.
- 아까 설정한 중단점에서 매크로가 중지됩니다. 키보드 F8키를 눌러 한단계씩 실행합니다.
특정 지점에서 계속 반복되는 상황이 생길거라 예상되는데요.
디버깅 후 어느 지점에서 무한반복이 일어나는지 말씀해주시면 확인 후 답변드리겠습니다. :)
위에 쓰신 것처럼 디버깅을 하니 아래 부분이 반복되고 있습니다.
With rng
.EntireColumn.ColumnWidth = .EntireColumn.ColumnWidth + cGap
End With
Next
채크 부탁드립니다.
그럴 경우 아래와 같이 명령문의 시작과 마지막 부분에 EnableEvents 를 각각 추가해서 수정해보시길 바랍니다.
그러면 문제가 바로 해결될겁니다. :)
남겨드린 답변이 문제를 해결하시는데 도움이 되었길 바랍니다. 감사합니다.
매번 행높이 맞추는게 그랬는데 ~~ 잘쓸게요 감사해요
필요하던 기능입니다.
현재 파일의 모듈 삭제, 리본 사용자 지정 메뉴에서 기존의 '행열맞춤' 버튼 제거 하신 뒤,
처음부터 다시 시작해보세요.
여유가 있어 보기에는 좋아 보이기도 하는데요. 때론 행/열 머리글 사이를 더블 클릭했을 때의 최소화된 간격이 아니라서 공간 사용이 많아지는 차이가 있네요.
혹시 알려주신 매크로에 가운데 정렬, 가운데맞춤, 폰트를 맑은고딕 혹은 폰트 사이즈 변경을 추가하려면 어떻게 변경해야 할까요??ㅠ
또, 실행전 꼭 컨드롤 에이로 전체셀선택 후 해당 매크로를 실행해야하는데 파일 다운하고 해당 매크로 클릭한번으로 바로 전체 셀 실행되도록 할 순 없을까요?ㅠ
을
로 변경하면 시트의 사용중인 범위 전체 대상으로 행/열 자동맞춤됩니다.