Picture

사진 삭제

노만e 2025. 3. 18. 07:15

엑셀에서 삽입된 이미지(Shape, Picture 등)를 일괄 삭제하는 기능이 기본적으로 제공되지 않기 때문에,

반복 작업을 줄이고 업무 효율성을 높이기 위해 해당 매크로가 필요합니다.

✅ (1) 엑셀에서 삽입된 이미지(Shape, Picture) 일괄 삭제

  • 엑셀에서는 삽입된 이미지, 도형(Shape), 차트 등을 개별적으로 삭제해야 함.
  • 수십 개, 수백 개의 이미지를 하나씩 선택하여 삭제하는 것은 비효율적.
  • 해당 VBA 코드로 한 번의 실행으로 전체 삭제 가능, 시간 절약 ⏳

✅ (2) 현재 시트 또는 모든 시트에서 삭제 선택 가능

  • 특정 시트에서만 삭제할지, 모든 시트에서 삭제할지 선택 가능.
  • 유연한 옵션 제공으로 사용자의 필요에 따라 삭제 범위 조정 가능.
  • 여러 개의 시트에 걸쳐 있는 이미지도 단 한 번의 실행으로 삭제.

✅ (3) 성능 최적화 (빠른 실행)

  • 이미지가 많아지면 엑셀 파일 용량이 증가하여 작업 속도가 느려질 수 있음.
  • 자동으로 ScreenUpdating = False 및 Calculation = Manual을 설정하여 삭제 속도 최적화.
  • 많은 데이터가 포함된 엑셀에서도 빠르게 실행 가능.

✅ (4) 불필요한 데이터 삭제로 파일 크기 줄이기

  • 엑셀 파일에 이미지가 많으면 용량이 증가하여 저장 및 공유가 어려울 수 있음.
  • 필요 없는 이미지를 삭제하여 파일 용량 최적화 → 메일 전송, 공유 용이 📧

' --- 시트의 모든 이미지 삭제 프로시저 ---
Sub DeleteAllImages()
    Dim sheetOption As Integer ' 사용자 입력 (현재 시트 / 모든 시트)
    Dim ws As Worksheet ' 개별 워크시트
    Dim shp As Shape ' 개별 Shape (이미지 포함)
    
    On Error Resume Next ' 오류 발생 시 무시
    
    ' 사용자 입력: 현재 시트(1) 또는 모든 시트(2)
    sheetOption = Application.InputBox("어느 시트의 이미지를 삭제할까요?" & vbCrLf & _
                                       "1: 현재 시트 (Only)" & vbCrLf & _
                                       "2: 모든 시트", "이미지 삭제 옵션", 2)
    
    ' 잘못된 입력 처리
    If sheetOption < 1 Or sheetOption > 2 Then Exit Sub

    ' 성능 최적화를 위해 화면 업데이트 및 계산 중지
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    ' 현재 시트만 삭제하는 경우
    If sheetOption = 1 Then
        DeleteImagesFromSheet ActiveSheet
    Else
        ' 모든 시트의 이미지 삭제
        For Each ws In ThisWorkbook.Sheets
            DeleteImagesFromSheet ws
        Next ws
    End If

    ' 성능 최적화 해제
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub

' --- 특정 시트에서 모든 이미지 삭제 ---
Sub DeleteImagesFromSheet(ws As Worksheet)
    Dim shp As Shape
    Dim pic As Picture
    
    ' 시트 내 모든 Picture 삭제
    For Each pic In ws.Pictures
        pic.Delete
    Next pic

    ' 시트 내 모든 Shape 삭제 (그림 포함)
    For Each shp In ws.Shapes
        shp.Delete
    Next shp
End Sub

DeleteAllImages.xlsm
0.19MB