• 최초 작성일: 2025-01-25
  • 최종 수정일: 2026-09-27
  • 조회수: 41 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: VBA 파워 코딩 255회 - 이미지 불러오기

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

"도무지 잊을래야 잊을 수 없는" 시리즈 제2탄

"영어 선생님이 영어를 잘 하는 비결은 매일 일정 시간을 영어를 가르치는데 사용하기 때문"이라는 말이 있습니다. 비단 영어 뿐이겠습니까. 무언가를 배우는 확실한 방법은 남에게 가르쳐 보는 것이겠지요.

이번 시간에는 (잊을 만하면 질문을 받기에) "도무지 잊을 수 없는 것" 시리즈 제2탄으로, 시트에 이미지를 불러오는 방법들에 대해 소개합니다.

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

워크시트에 이미지를 불러오는 방법 정리

핵심 요약: 워크시트에 이미지를 불러오는 세 가지 방법

이미지가 적으면 동적 이름 정의와 INDIRECT 함수로 다른 시트의 이미지를 불러오고, 많으면 Pictures.Insert 메서드로 폴더나 웹에 있는 이미지 파일을 불러옵니다.

  • 방법 1: 다른 워크시트의 이미지 - 동적 이름 정의 + INDIRECT + 콤보 상자
  • 방법 2: 폴더의 이미지 파일 - Pictures.Insert + ThisWorkbook.Path
  • 방법 3: 웹의 이미지 파일 - 방법 2에서 파일 경로만 웹 주소로 변경
  • 선택 기준: 이미지가 많을수록 방법 2, 3이 효율적

방법 1: 워크시트에 있는 이미지 불러오기

예제 파일의 'Sheet1'에 있는 콤보 상자를 클릭하고 목록을 선택하면 선택된 목록에 해당되는 이미지가 표시되며, 이 이미지는 다른 워크시트에 있습니다. '동적 이름 정의'와 Indirect 함수를 이용하면 간단하게 구현할 수 있습니다.

콤보 상자에서 항목을 선택하면 해당 이미지가 표시되는 Sheet1
아이엑셀러

(1) '수식' 탭의 '이름 정의'를 클릭하고 이름을 정의합니다. '이름' 항목에는 'Pic_List', '참조 대상' 항목에는 다음 수식을 입력합니다. 'images' 시트의 B열 중에서 값이 들어있는 부분을 범위로 지정하기 위한 '동적 이름 정의'입니다.

=OFFSET(images!$B$1,0,0,COUNTA(images!$B:$B),1)

(2) 같은 방법으로 이름을 하나 더 정의합니다. '이름' 항목에는 'Pic_Link', '참조 대상' 항목에는 Indirect 함수를 이용하여 아래와 같이 해 줍니다.

=INDIRECT("images!a" & Sheet1!$D$3)

이 수식이 의미하는 것은?

"Sheet1의 D3 셀에 있는 값을, images 시트의 A열 중에서 그 값이 있는 셀 주소의 내용을 화면상에 표시하라"라는 의미입니다. 여기서 D3은 콤보 상자에서 '셀 연결'을 통해 대상 리스트 중에서 몇 번째 것이 선택되었는지 정보가 담겨 있는 셀입니다.

(3) 'images' 시트에 있는 이미지 중 하나를 복사하여 'Sheet1'에 붙여 넣습니다.

(4) 붙여 넣은 이미지를 선택하고 수식 입력줄에 '=Pic_Link'라고 입력한 다음, <Enter> 키를 누릅니다. 대소문자는 구분하지 않아도 됩니다.

붙여 넣은 이미지를 선택하고 수식 입력줄에 =Pic_Link를 입력한 모습
아이엑셀러

참고: 원문 수정

원문에는 (1)의 수식 끝의 닫는 괄호가 빠져 있었고, (4)의 이름이 'Pic_Lick'(오타)으로, 등호 없이 적혀 있었습니다. 수식 입력줄에 이름을 연결할 때는 등호를 붙여 =Pic_Link로 입력하므로 이에 맞게 바로잡았습니다.

(5) '개발 도구' 탭에서 '삽입'을 클릭하고, '양식 컨트롤'의 도구 상자를 선택합니다. 시트 내의 적당한 곳에 콤보 상자를 삽입합니다.

(6) 콤보 상자를 마우스 오른쪽 버튼으로 클릭하고 '컨트롤 서식'을 선택합니다. '컨트롤 서식' 대화상자의 '컨트롤' 탭에서 각 항목을 다음과 같이 지정하고 '확인' 버튼을 클릭합니다.

컨트롤 서식 대화상자에서 입력 범위를 Pic_List, 셀 연결을 D3으로 지정한 모습
아이엑셀러

이렇게 하면, 콤보 박스에서 목록을 선택하면 그에 맞는 이미지가 화면에 표시됩니다.

방법 2: 폴더에 있는 이미지 불러오기

이미지가 몇 개 안 된다면 상관없지만 개수가 많아지면 [방법 1]은 바람직하지 않습니다. 엑셀의 워크시트는 '책상 또는 작업용 테이블'과 비슷합니다. 반면, 방대한 양의 이미지 파일이나 데이터베이스 정보는 '창고'에 비유할 수 있습니다. 용량을 많이 차지하는 자료들은 창고에 보관해 두고 필요할 때마다 가져와서 처리하는 것이 효율적이겠지요?

예제 파일의 'Sheet2'에 있는 콤보 상자를 클릭하고 목록을 선택하면 선택된 목록에 해당되는 이미지가 표시됩니다. 물론 이 때 불러온 이미지는 워크시트에 있는 것이 아니라 외부 파일입니다.

[주의] 이번 강좌 파일(VB0255_LoadPicture.xlsm)과 이미지 파일들은 같은 폴더에 있어야 제대로 작동합니다. 압축을 풀 때 폴더 위치를 확인하세요!

(1) 코딩에 앞서 필요한 이름을 미리 정의합니다. 'ImageStart'는 이미지를 표시할 기준 위치, 'MyIndex'는 콤보 박스의 '셀 연결' 항목과 관련이 있습니다.

이름 관리자에서 ImageStart와 MyIndex 이름을 정의한 모습
아이엑셀러

(2) '개발 도구' 탭에서 '삽입'을 클릭하고, '양식 컨트롤'에 있는 '콤보 상자'를 시트에 삽입합니다.

(3) 콤보 상자를 마우스 오른쪽 버튼으로 클릭하고 '컨트롤 서식' 대화상자의 '컨트롤' 탭의 각 항목을 지정한 다음, '확인' 버튼을 클릭합니다.

컨트롤 서식 대화상자에서 셀 연결을 MyIndex로 지정한 모습
아이엑셀러

(4) 콤보 상자에 연결할 코드를 작성합니다.

Sub LoadPicFromFolder()
    Dim picMyShape As Picture        ' 이미지 파일에 접근하기 위한 개체 변수
    Dim sPath As String              ' 폴더에 접근하기 위한 문자열 변수
    On Error Resume Next             ' 실행 도중 오류가 발생하더라도 다음 구문 실행

    ActiveSheet.Pictures.Delete      ' 현재 시트 내의 모든 이미지 삭제
    Range("ImageStart").Select       ' 이미지를 표시할 위치 선택
    sPath = ThisWorkbook.Path & "\L_" & Range("MyIndex") & ".jpeg"
                                     ' 폴더명과 파일 이름을 & 연산자를 이용하여 연결
    Set picMyShape = ActiveSheet.Pictures.Insert(sPath) ' 이미지 파일을 시트에 삽입
    picMyShape.Width = Range("ImageStart").Width * 6    ' 이미지 파일의 크기 지정
End Sub

(5) 콤보 상자를 마우스 오른쪽 버튼으로 클릭하고 '매크로 지정' 메뉴를 선택합니다. '매크로 지정' 대화상자에서 연결할 매크로를 선택하고 '확인' 버튼을 클릭합니다.

매크로 지정 대화상자에서 LoadPicFromFolder 매크로를 선택한 모습
아이엑셀러

방법 3: 웹에 있는 이미지 불러오기

이번에는 인터넷에 올라와 있는 이미지 파일을 불러오는 방법에 대해 알아봅니다. 다른 과정은 앞의 [방법 2]와 거의 같습니다. 콤보 상자에 연결된 코드 중에서 이미지 파일의 위치를 지정하는 부분에서만 차이가 있습니다.

sPath = ThisWorkbook.Path & "\L_" & Range("MyIndex") & ".jpeg"

이 부분을 다음과 같이 바꿔 주면 됩니다. 파일이 있는 웹사이트 주소와 파일 이름을 & 연산자를 이용하여 연결해 주었습니다.

sPath = "http://www.iExceller.com/MyXls/test_image\" & "\L_" & Range("MyIndex") & ".jpeg"

이 방법을 이용하면 인터넷 환경이 갖춰진 곳이라면 어디에서나 접근할 수 있으므로 관리하기가 용이합니다. 만약 불러올 자료가 많거나 하여 로딩 속도가 늦다면 다음 구문을 프로시저 앞 부분에 추가하시기 바랍니다.

Application.ScreenUpdating = False
....... 어쩌고 .......
....... 저쩌고 .......
Application.ScreenUpdating = True

참고: 원문 코드 수정

원문의 마지막 줄에 Applicaion.ScreenUpdating = True로 오타가 있어 Application으로 바로잡았습니다.

이만하면 웬만큼 정리가 된 것 같은데... 다른 기발한 아이디어를 가진 분은 알려주시기 바랍니다.

참고: 이미지에 대하여

이 글은 원래 네이버 포스트에 게재되었던 글로, 네이버 포스트 서비스 종료로 네이버 블로그로 옮기는 과정에서 원본 이미지가 소실되었습니다. 위 이미지는 본문 설명을 바탕으로 당시 화면 구성을 재구성한 예시 이미지이며, 실제 엑셀 화면과 세부 디자인(버전별 UI), 이미지 속 목록 항목이나 셀 주소는 다를 수 있습니다.

정리 — 이미지를 불러오는 세 가지 방법

방법 이미지 위치 핵심 기법
방법 1 다른 워크시트 동적 이름 정의(OFFSET), INDIRECT 함수, 이미지에 이름 연결
방법 2 폴더의 이미지 파일 Pictures.Insert 메서드 + ThisWorkbook.Path
방법 3 웹의 이미지 파일 Pictures.Insert 메서드 + 웹 주소, ScreenUpdating으로 속도 개선

자주 묻는 질문 (FAQ)

Q1. 엑셀 워크시트에 이미지를 불러오는 방법에는 어떤 것이 있나요?

크게 세 가지입니다. 다른 워크시트에 있는 이미지를 동적 이름 정의와 INDIRECT 함수로 불러오는 방법, 폴더에 있는 이미지 파일을 VBA로 불러오는 방법, 웹에 있는 이미지 파일을 VBA로 불러오는 방법입니다.

Q2. 이미지가 많을 때는 어떤 방법이 좋은가요?

이미지 개수가 많으면 통합 문서 용량이 커지는 방법 1은 바람직하지 않습니다. 이미지는 폴더나 웹에 두고 필요할 때마다 VBA로 불러오는 방법 2, 3이 효율적입니다.

Q3. 폴더에 있는 이미지가 표시되지 않으면 어떻게 하나요?

코드에서 ThisWorkbook.Path를 기준으로 파일 경로를 만들기 때문에 엑셀 파일과 이미지 파일이 같은 폴더에 있어야 합니다. 압축을 풀 때 폴더 위치를 확인하세요.

마치며

이미지가 적으면 시트 안에, 많으면 폴더나 웹에 두고 불러오는 것이 정석입니다. 콤보 상자와 함께 직접 만들어 보세요!
VBA에 대한 기초 지식을 공부하실 분은 아이엑셀러 닷컴 사이트 정문 왼쪽에 있는 'VBA 강좌 - VBA 입문강좌'를 읽어보시면 이해가 빠릅니다.