엑셀 이미지 셀 크기에 맞추는 VBA 매크로: 복사·붙여넣기 자동 정렬 완벽 가이드

엑셀 두 파일 간 이미지 복사 후 붙여넣기 시 셀에 자동으로 맞추려면 VBA 매크로를 사용해야 합니다. 붙여넣기 직후 Shape 개체를 가져와 Left·Top 기준으로 셀 위치를 계산하고, Width·Height를 해당 셀 크기로 재설정하는 Sub를 작성하면 됩니다.

📋 이 글의 핵심  |  
엑셀 이미지 셀 크기에 맞추는 VBA 매크로: 복사·붙여넣기 자동 정렬 완벽 가이드

엑셀에서 이미지가 셀 크기에 맞지 않는 이유

엑셀에서 다른 파일로 이미지를 복사·붙여넣으면 원본 크기 그대로 붙는 것이 기본 동작입니다. 셀 크기가 작으면 이미지가 셀 밖으로 넘치고, 크면 공간이 남아 정렬이 어긋납니다. 특히 두 개의 엑셀 통합 문서를 동시에 열고 이미지를 옮기는 작업을 반복할 때 이 문제가 심각해집니다. 수동으로 이미지를 셀 크기에 맞추려면 도형 선택 후 크기·위치를 하나씩 입력해야 해서 이미지 수가 많아질수록 시간이 기하급수적으로 늘어납니다. VBA 매크로를 사용하면 이 과정을 단 한 번의 실행으로 자동화할 수 있습니다. 셀의 Top, Left, Width, Height 값을 읽어와 Shape 개체에 적용하는 방식으로, 이미지가 항상 해당 셀 안에 꼭 맞게 위치합니다.

핵심 VBA 코드: AlignIMG 서브루틴

이미지를 셀에 맞추는 핵심 VBA 코드는 다음과 같습니다. 먼저 이미지(Shape)의 현재 Top, Left 좌표를 기준으로 어느 행(WR)과 열(WC)에 위치하는지 계산합니다. 이후 해당 셀(SCell)의 Width와 Height를 Shape에 적용합니다.

Sub AlignIMG(Shp As Shape)
    Dim i As Long, WR As Integer, WC As Integer
    Dim SRatio As Single, CRatio As Single, Gap As Single
    Dim SCell As Range
    Gap = 2  ' 셀 여백 (픽셀)

    For i = 1 To ActiveSheet.Rows.Count
        If Cells(i, 1).Top > Shp.Top Then
            WR = i - 1: Exit For
        End If
    Next i

    For i = 1 To ActiveSheet.Columns.Count
        If Cells(1, i).Left > Shp.Left Then
            WC = i - 1: Exit For
        End If
    Next i

    Set SCell = Cells(WR, WC)
    Shp.Width = SCell.Width - Gap

    SRatio = Shp.Width / Shp.Height
    CRatio = SCell.Width / SCell.Height
    If SRatio < CRatio Then
        Shp.Height = SCell.Height - Gap
    End If

    Shp.Left = SCell.Left + (SCell.Width - Shp.Width) / 2
    Shp.Top = SCell.Top + (SCell.Height - Shp.Height) / 2
End Sub

Gap 값을 조정하면 이미지와 셀 테두리 사이의 여백을 조절할 수 있습니다. Gap=0이면 셀을 꽉 채우고, Gap=4~6이면 적당한 여백이 생겨 시각적으로 자연스럽습니다.

전체 시트·선택 범위에 일괄 적용하는 방법

위의 AlignIMG는 이미지 하나를 처리하는 서브루틴입니다. 시트 전체 이미지에 일괄 적용하려면 호출 서브루틴이 필요합니다.

Sub AlignAllImages()
    Dim Shp As Shape
    For Each Shp In ActiveSheet.Shapes
        If Shp.Type = msoPicture Then
            AlignIMG Shp
        End If
    Next Shp
End Sub

선택된 개체만 처리하려면 Selection을 이용합니다.

Sub AlignSelectedImages()
    Dim Shp As Shape
    If TypeName(Selection) = "DrawingObjects" Then
        For Each Shp In Selection.ShapeRange
            If Shp.Type = msoPicture Then
                AlignIMG Shp
            End If
        Next Shp
    End If
End Sub

이 세 개 서브루틴을 VBA 편집기(Alt+F11) → 삽입 → 모듈에 붙여넣고, 단축키(Alt+F8 → 매크로 실행)를 지정해두면 이미지 정렬이 클릭 한 번으로 완료됩니다.

PERSONAL.XLSB에 등록해 모든 파일에서 사용하기

매크로를 현재 파일 한 개에만 저장하면 다른 엑셀 파일을 열었을 때 사용할 수 없습니다. 모든 엑셀 파일에서 공통으로 쓰려면 PERSONAL.XLSB(개인용 매크로 통합 문서)에 저장해야 합니다. 방법은 다음과 같습니다. 엑셀을 열고 Alt+F11로 VBA 편집기를 실행합니다. 왼쪽 탐색 창에서 VBAProject(PERSONAL.XLSB) > 모듈을 펼칩니다. 기존 Module이 없으면 마우스 우클릭 → 삽입 → 모듈로 새 모듈을 만듭니다. 위의 코드를 붙여넣고 저장합니다. 이후 엑셀 종료 시 “개인용 매크로 통합 문서를 저장하시겠습니까?” 팝업이 뜨면 반드시 저장을 눌러야 합니다. 이렇게 하면 어떤 엑셀 파일을 열어도 Alt+F8에서 해당 매크로를 바로 실행할 수 있습니다.

두 파일 간 이미지 이동 시 주의할 점

엑셀 두 파일 사이에서 이미지를 복사·붙여넣기할 때는 추가적인 주의가 필요합니다. 이미지를 복사한 뒤 대상 파일의 셀을 먼저 클릭하고 붙여넣어야 원하는 위치 근처에 이미지가 놓입니다. 붙여넣기 직후 이미지가 여전히 선택된 상태에서 AlignSelectedImages 매크로를 실행하면 즉시 셀에 정렬됩니다. 셀 크기(행 높이·열 너비)가 너무 작으면 이미지가 제대로 들어가지 않으므로, 이미지 원본 비율에 맞게 셀 크기를 미리 맞춰두는 것이 좋습니다. 또한 이미지가 여러 셀에 걸쳐 있을 때 AlignIMG는 이미지의 가장 왼쪽 위 모서리 기준 셀에 맞추므로, 이미지가 1셀을 온전히 차지하도록 셀 크기를 조정한 후 매크로를 실행하는 것이 최적입니다.

자주 묻는 질문