엑셀에서 삽입된 이미지(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 |