
여러장의 이미지 셀 크기에 맞게 조정
🚀 이 매크로가 필요한 이유
1️⃣ 엑셀에서 이미지 정렬 및 크기 조정 자동화
- 엑셀에서 삽입된 이미지(예: 제품 사진, 도표 등)를 일일이 마우스로 크기 조정하는 것은 매우 번거로운 작업입니다.
- 이 매크로를 사용하면 한 번의 실행만으로 여러 개의 이미지를 자동으로 조정할 수 있습니다.
2️⃣ 셀 크기에 맞는 이미지 배치
- 이미지 크기가 일정하지 않거나 셀 범위를 벗어나는 경우, 자동으로 크기를 셀 크기에 맞게 조정할 수 있습니다.
- 셀 크기에 따라 이미지 크기를 "딱 맞게", "조금 작게", "더 작게" 설정하는 옵션을 제공하여 가독성과 정렬을 유지할 수 있습니다.
3️⃣ 회전된 이미지까지 자동 정렬
- 엑셀에서는 사용자가 이미지를 90도 또는 270도 회전시키면 크기 조정이 더욱 어려워집니다.
- 매크로는 회전된 이미지의 크기 및 위치까지 자동으로 조정하여, 사용자가 직접 수정할 필요 없이 일관된 정렬 상태를 유지할 수 있습니다.
4️⃣ 병합된 셀도 고려
- 병합된 셀 내에서 이미지가 위치할 경우, 해당 병합 범위를 고려하여 크기를 조정하는 기능이 포함되어 있습니다.
- 이는 단순한 크기 조정 매크로보다 더 정교한 자동화 기능을 제공합니다.
' 사진 크기를 선택한 셀 범위에 맞게 조정하는 매크로
Sub ResizeImagesInCells()
Dim imageShape As Shape ' 개별 이미지 개체
Dim targetCell As Range ' 이미지가 위치한 셀
Dim selectedRange As Range ' 사용자가 선택한 범위
Dim imageResizeOption As Integer ' 사용자 입력(크기 옵션)
Dim rotationAngle As Long ' 이미지의 회전 각도
' 사용자가 이미지 크기를 조정할 범위를 선택
On Error Resume Next
Set selectedRange = Application.InputBox("사진 크기를 변경할 범위를 선택하시오", "사진 범위", Type:=8)
If selectedRange Is Nothing Then Exit Sub
' 사용자에게 이미지 크기 조정 옵션을 입력받음
imageResizeOption = InputBox("사진의 크기를 선택하세요:\n1: 딱 맞게\n2: 조금 작게\n3: 더 작게", "크기 옵션", Default:=1)
' 시트 내 모든 Shape(개체) 확인
For Each imageShape In ActiveSheet.Shapes
Set targetCell = imageShape.TopLeftCell ' 이미지의 좌측 상단이 위치한 셀
' 이미지가 사용자가 지정한 범위 내에 있는지 확인
If Not Intersect(targetCell, selectedRange) Is Nothing Then
' 병합된 셀일 경우 전체 병합 영역을 대상으로 함
If targetCell.MergeCells Then
Set targetCell = targetCell.MergeArea
End If
' 이미지 선택 후 속성 변경
imageShape.Select
With Selection
.ShapeRange.LockAspectRatio = msoFalse ' 비율 고정 해제
rotationAngle = .ShapeRange.Rotation ' 현재 회전 각도 저장
' 이미지 회전 상태에 따라 크기 및 위치 조정
If rotationAngle = 90 Or rotationAngle = 270 Then
' 세로 회전 상태 (90도 또는 270도)
.ShapeRange.Rotation = 0 ' 회전 해제 후 크기 조정
.Height = targetCell.Width - (imageResizeOption * 4) + 4
.Width = targetCell.Height - (imageResizeOption * 4) + 4
.Left = targetCell.Left + (targetCell.Width - .Width) / 2
.Top = targetCell.Top + (targetCell.Height - .Height) / 2
.ShapeRange.Rotation = rotationAngle ' 원래 회전 상태 복원
Else
' 가로 회전 상태 (0도 또는 180도)
.ShapeRange.Rotation = 0 ' 회전 해제 후 크기 조정
.Left = targetCell.Left + (imageResizeOption * 2) - 2
.Top = targetCell.Top + (imageResizeOption * 2) - 2
.Height = targetCell.Height - (imageResizeOption * 4) + 4
.Width = targetCell.Width - (imageResizeOption * 4) + 4
.ShapeRange.Rotation = rotationAngle ' 원래 회전 상태 복원
End If
End With
End If
' 변수 초기화
Set targetCell = Nothing
Next imageShape
End Sub
|
다운로드