병합 셀 행 높이 자동 맞춤, 안 되는 이유와 해결 3가지

2026-09-03

왜 병합 셀에서는 자동 맞춤이 안 되나요

먼저 안 되는 것부터 말씀드립니다. 엑셀의 행 높이 자동 맞춤은 병합된 셀의 글자 양을 계산에 넣지 않습니다. 버그가 아니라 설계가 그렇습니다.

자동 맞춤은 "이 셀의 글자가 이 열 너비 안에서 몇 줄이 되는가"를 셀 단위로 계산합니다. 그런데 병합 셀의 글자는 여러 열에 걸쳐 있어서, 엑셀 입장에서는 그 높이를 어느 열에 물어야 할지 정할 수 없습니다. 그래서 아예 계산에서 빼 버립니다. 결과적으로 병합 셀은 "빈 셀"로 취급되고, 그 행에 남은 일반 셀 중 가장 낮은 높이로 맞춰집니다. 열 너비 자동 맞춤이 된 것처럼 보인 이유도 같습니다. 그 열에 병합 안 된 일반 셀이 섞여 있어서 그 셀 기준으로 맞춰진 것뿐입니다.

그러면 어떻게 맞추나요

방법 1. 병합을 없애고 같은 모양을 냅니다. 가로로만 병합했다면 병합 자체가 필요 없습니다. 네 단계입니다.

1. 해당 범위 병합 해제
2. 범위 선택 후 Ctrl + 1
3. 맞춤 탭 > 가로 > 선택 영역의 가운데로
4. 텍스트 줄 바꿈 체크(Alt + H + W)

보기에는 병합과 구분이 안 되는데, 자동 맞춤·정렬·필터·복사가 전부 정상으로 돌아옵니다. 셀 하나하나는 병합되지 않은 상태라 자동 맞춤이 글자를 다시 세기 시작합니다.

방법 2. 병합을 유지해야 하면 매크로를 씁니다. Alt + F11 > 삽입 > 모듈에 붙여 넣고, 대상 범위를 선택한 뒤 실행합니다.

Sub 병합셀_행높이_맞춤()
    Dim 셀 As Range, 조각 As Range, 대상 As Range
    Dim 총너비 As Double, 새높이 As Double
    Dim 임시 As Worksheet, 원본 As Worksheet

    If TypeName(Selection) <> "Range" Then Exit Sub
    Set 원본 = ActiveSheet
    Set 대상 = Intersect(Selection, 원본.UsedRange)
    If 대상 Is Nothing Then Exit Sub

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set 임시 = Worksheets.Add
    원본.Activate

    For Each 셀 In 대상.Cells
        If 셀.MergeCells Then
        If 셀.Address = 셀.MergeArea.Cells(1, 1).Address _
           And 셀.MergeArea.Rows.Count = 1 Then
            총너비 = 0
            For Each 조각 In 셀.MergeArea.Cells
                총너비 = 총너비 + 조각.ColumnWidth
            Next 조각
            With 임시.Range("A1")
                .ClearContents
                .ColumnWidth = 총너비
                .WrapText = True
                .Font.Name = 셀.Font.Name
                .Font.Size = 셀.Font.Size
                .Font.Bold = 셀.Font.Bold
                .NumberFormat = 셀.NumberFormat
                .Value = 셀.Value
                .EntireRow.AutoFit
                새높이 = .RowHeight + 2
                If 새높이 > 409 Then 새높이 = 409
                셀.MergeArea.RowHeight = 새높이
                .ClearContents
            End With
        End If
        End If
    Next 셀

    임시.Delete
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

임시 시트에 같은 글꼴·같은 총너비의 셀을 하나 만들어 놓고, 거기서 진짜 자동 맞춤을 돌린 다음 그 높이를 병합 셀에 옮겨 적는 방식입니다. 엑셀이 안 해 주는 계산을 대신 시켜 놓고 답만 가져오는 셈입니다.

실무에서 걸리는 함정 다섯 가지

하나, 텍스트 줄 바꿈이 꺼져 있으면 무조건 한 줄입니다. 줄 바꿈이 꺼진 셀은 글자가 몇 자든 한 줄로 취급되므로 자동 맞춤은 높이를 최소로 줄입니다. 줄 바꿈부터 켜고 시작하셔야 합니다.

둘, 세로 병합(위아래 여러 행 병합)은 위 매크로도 건너뜁니다. 어느 행에 높이를 얼마씩 나눠 줄지 정할 근거가 없어서 계산이 성립하지 않습니다. MergeArea.Rows.Count = 1 조건이 그래서 들어가 있습니다. 세로 병합은 맞추는 게 아니라 푸는 쪽이 답입니다.

셋, 열 너비를 바꾸면 높이는 따라오지 않습니다. 너비를 건드린 뒤에는 자동 맞춤을 다시 실행해야 합니다. 인쇄 직전에 여백을 조정하고 그대로 출력하면 아랫줄이 잘립니다.

넷, 행 높이 상한은 409.5포인트입니다. 글자가 그보다 많으면 자동 맞춤이 성공해도 뒷부분은 안 보입니다. 위 코드가 409에서 자르는 것도 그 때문이고, 이 경우는 높이가 아니라 글자를 나눠야 합니다.

다섯, 매크로는 실행 취소가 안 됩니다. VBA가 실행되면 실행 취소 기록이 지워집니다. 반드시 사본에서 먼저 돌려 보시기 바랍니다.

정산 파일이라면 병합을 아예 줄이는 쪽이 낫습니다

주문·정산 내역 파일에서 병합은 높이 문제로 끝나지 않습니다. 병합 영역의 값은 실제로 왼쪽 위 한 칸에만 있고 나머지 칸은 빈 셀입니다. 그래서 VLOOKUP·XLOOKUP·SUMIF의 조건 범위에 병합 열이 들어가면 두 번째 행부터는 조용히 0이나 빈칸이 나옵니다. 오류 메시지가 안 뜨기 때문에 합계가 틀어져도 바로 못 알아챕니다. 정렬과 필터에서는 "이 작업을 수행하려면 병합하려는 셀의 크기가 모두 같아야 합니다"가 뜨고, 피벗 테이블은 병합 헤더를 필드 이름으로 못 읽습니다.

한 줄로 줄이면, 병합 셀 행 높이 자동 맞춤이 안 되는 것은 엑셀이 병합 셀의 글자를 세지 않기 때문이고, 해결은 병합을 풀고 "선택 영역의 가운데로"를 쓰거나 임시 시트에서 높이를 계산해 옮겨 적는 매크로를 쓰는 두 갈래입니다. 보고서용 표지 한 장이면 매크로로 버텨도 되지만, 매달 돌리는 정산 파일이라면 병합을 없애는 쪽이 나중에 손이 훨씬 덜 갑니다.

지금 그 파일, 어디가 문제인지 먼저 보시겠습니까

CSV 를 넣으면 계산이 틀어지는 자리를 찾아 드립니다. 무료이고 파일은 서버로 올라가지 않습니다 — 브라우저 안에서만 처리되고 저희도 내용을 볼 수 없습니다.

정산 파일 진단기 열기  ·  무료 자료실

매달 같은 순서로 고치고 계신다면 그 순서를 프로그램으로 옮겨둔 것이 있습니다 — 쇼핑몰 월 정산 자동화. 되는지부터 보시려면 무료 진단.

CHEONOK SYSTEM · 업무 자동화 제작
안 되는 파일이면 안 된다고 말씀드립니다 · 문의 actorlee007@gmail.com
매출이나 수익을 보장하지 않습니다.