ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Excel] VBA 행/열 자동 맞춤
    업무 자동화/Excel 2026. 1. 26. 09:20

    업무용 엑셀을 다루다 보면 열 너비/행 높이가 내용에 비해 좁아서 잘리거나, 반대로 불필요하게 넓어서 보기 불편한 경우가 자주 생깁니다.


    이번 글에서는 VBA로 열/행 AutoFit을 한 번에 정리할 수 있는 매크로를 선택영역/현재 시트/전체 시트으로 정리하고,
    바로 실행해볼 수 있는 샘플 파일 구성 방법까지 함께 안내합니다.
    샘플 파일은 글 아래에서 확인하실 수 있습니다.


    요약

    • 선택 영역 기반 자동 맞춤 구성
    • 현재 시트 UsedRange 기반 자동 맞춤 구성
    • 모든 시트 UsedRange 기반 일괄 자동 맞춤 구성
    • WrapText/병합 셀 등 AutoFit 예외 사항 정리
    • 샘플 파일로 실행 검증 절차 정리

    단어 의미

    • AutoFit(자동 맞춤): 셀 내용 길이에 맞춰 열 너비/행 높이를 자동 조정하는 기능
    • UsedRange(사용 영역): 시트에서 실제로 사용된 범위를 Excel이 추정하는 영역
    • WrapText(자동 줄바꿈): 셀 너비에 맞춰 텍스트를 여러 줄로 표시하는 옵션
    • Merged Cells(병합 셀): 여러 셀을 하나로 합친 셀(일부 AutoFit 동작이 제한될 수 있음)

    1. 요구사항 정리

    구성 목표는 아래와 같습니다.

    • 버튼/리본을 따로 만들지 않아도 매크로 실행만으로 열/행이 깔끔하게 정리될 것
    • 상황에 맞게 선택할 수 있도록 3가지 범위 옵션 제공
      • 선택 영역(Selection)
      • 현재 시트(ActiveSheet)
      • 전체 시트(ThisWorkbook 전체)
    • 대용량 시트에서도 무리 없이 돌릴 수 있도록 필요 시 ScreenUpdating 끄기 등 기본 최적화 포함

    2. 전체 동작 구조

    VBA 구성은 간단하게 “표준 모듈”에 매크로 3개를 넣는 방식입니다.

    1) 표준 모듈(Module)

    • AutoFit_Selection : 선택한 범위 기준으로 열/행 AutoFit
    • AutoFit_ActiveSheet_UsedRange : 활성 시트의 UsedRange 기준으로 열/행 AutoFit
    • AutoFit_AllSheets_UsedRange : 통합문서 전체 시트에 대해 UsedRange 기준으로 열/행 AutoFit

    3. VBA 코드: 표준 모듈에 붙여넣기

    3-1) 선택 영역 AutoFit

    • 선택한 셀 범위를 기준으로, 그 범위가 포함된 행/열 전체를 AutoFit 합니다.
    • (실무에서는 “부분 선택 후 해당 열만 정리”할 때 가장 자주 씁니다.)
    Option Explicit
    
    '1) 선택한 범위만 AutoFit
    Sub AutoFit_Selection()
        On Error GoTo EH
    
        If TypeName(Selection) = "Range" Then
            Dim rng As Range
            Set rng = Selection
    
            rng.EntireColumn.AutoFit
            rng.EntireRow.AutoFit
        End If
    
        Exit Sub
    EH:
        MsgBox "AutoFit 중 오류: " & Err.Description, vbExclamation
    End Sub

    3-2) 현재 시트(UsedRange) AutoFit

    • 현재 시트에서 “사용 중인 영역”을 기준으로 정리합니다.
    • “시트 전체”를 잡는 것보다 부담이 적고, 대부분의 업무용 파일에 잘 맞습니다.
    '2) 현재 활성 시트 UsedRange 기준 AutoFit
    Sub AutoFit_ActiveSheet_UsedRange()
        On Error GoTo EH
    
        With ActiveSheet.UsedRange
            .EntireColumn.AutoFit
            .EntireRow.AutoFit
        End With
    
        Exit Sub
    EH:
        MsgBox "AutoFit 중 오류: " & Err.Description, vbExclamation
    End Sub

    3-3) 모든 시트(UsedRange) AutoFit

    • 통합문서 전체 시트를 한 번에 정리합니다.
    • (월간 보고서, 여러 탭으로 나뉜 데이터 정리할 때 유용)
    '3) 모든 시트 UsedRange 기준 AutoFit
    Sub AutoFit_AllSheets_UsedRange()
        On Error GoTo EH
    
        Dim ws As Worksheet
        Application.ScreenUpdating = False
    
        For Each ws In ThisWorkbook.Worksheets
            With ws.UsedRange
                .EntireColumn.AutoFit
                .EntireRow.AutoFit
            End With
        Next ws
    
        Application.ScreenUpdating = True
        Exit Sub
    
    EH:
        Application.ScreenUpdating = True
        MsgBox "AutoFit 중 오류: " & Err.Description, vbExclamation
    End Sub

    4. 특정 열만 AutoFit

    “전체 정리”가 아니라 특정 열만 정리하고 싶을 때는 아래처럼 간단히 쓸 수 있습니다.

    '예: A:D 열만 AutoFit
    Sub AutoFit_Columns_AD()
        Columns("A:D").AutoFit
    End Sub

    5. AutoFit이 기대와 다르게 동작하는 경우(실무 팁)

    5-1) 병합 셀(Merged Cells)

    • 병합 셀이 포함된 범위에서는 AutoFit이 원하는 결과가 안 나올 수 있습니다.
    • 가능하면 병합을 최소화하고, 대신 “가운데 맞춤(선택 영역)” 같은 서식으로 대체하는 편이 안정적입니다.

    5-2) 행 AutoFit + WrapText

    • 행 높이 AutoFit은 WrapText(줄바꿈) 여부에 크게 영향을 받습니다.
    • 줄바꿈을 켠 셀은 텍스트 길이에 따라 행이 커질 수 있으니, 보고서/양식 목적이라면 “줄바꿈 규칙”을 먼저 통일해두는 게 좋습니다.

    5-3) UsedRange가 실제보다 크게 잡히는 현상

    • 셀을 한 번 사용했다가 지우면 UsedRange가 남는 경우가 있습니다.
    • 이때는 “불필요하게 넓은 범위”까지 AutoFit이 걸릴 수 있어요.
      (정리 방법: 불필요한 행/열 삭제 → 저장 → 다시 열기 등으로 개선되는 경우가 많습니다.)

    6. 샘플 파일로 바로 테스트하는 방법

    아래 순서대로 하면 “AutoFit 전/후 변화”가 바로 눈에 보입니다.

    1) 샘플 파일을 준비합니다(예: AutoFit_Test_Sample.xlsx)
    2) Excel에서 파일을 연 다음, 다른 이름으로 저장 → .xlsm(매크로 사용 통합문서) 로 저장
    3) Alt + F11 → VBA 편집기 열기
    4) 삽입(Insert) → 모듈(Module) 추가
    5) 위의 매크로 코드를 붙여넣고 저장
    6) Excel로 돌아와서 Alt + F8 → 실행할 매크로 선택 → 실행


    AutoFit_Test_Sample.xlsx
    0.02MB

Designed by Tistory.