• 최초 작성일: 2013-09-16
  • 최종 수정일: 2026-09-30
  • 조회수: 15 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: VBA 파워 코딩 234회 - 웹 이미지로 카탈로그

들어가기 전에

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

이미지가 많아질수록 워크시트에 직접 삽입해 두는 방식은 파일을 무겁게 만듭니다. 이번 시간에는 이미지를 워크시트에 저장하지 않고, 필요할 때마다 웹에서 불러와 보여주는 방식으로 가벼운 상품 카탈로그를 만들어 보겠습니다.

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

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

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


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

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

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

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

화살표 버튼으로 넘겨보는 상품 카탈로그 만들기

핵심 요약: 웹 이미지를 불러오는 상품 카탈로그

이미지를 워크시트에 저장하는 대신, LeftArrow/RightArrow 클릭 시 인덱스를 바꾸고 GetImageFromWeb 프로시저가 Pictures.Insert로 그때그때 웹의 이미지를 불러오는 방식입니다.

  • 인덱스 관리: MyIndex로 이름 정의된 셀 값을 화살표 클릭 시 ±1
  • 이미지 교체: 기존 MyImage 도형을 삭제한 뒤 Pictures.Insert로 새로 삽입
  • URL 규칙: 폴더 경로 + 'ap_' + 인덱스 + '.jpg' 형태로 파일명 규칙화
  • 장점: 워크시트 용량을 가볍게 유지하면서 다량의 이미지 관리 가능

잊을 만하면 한 번씩 받는 질문 중에 이런 것이 있습니다.

엑셀에 이미지를 삽입하려고 합니다. 그런데 이미지가 너무 많아서 일일이 집어넣는 것이 보통 일이 아니네요… 엑셀에서 이미지 경로와 이름을 미리 지정해 주고 넣는 방법은 없을까요? 이미지 파일이 적을 때는 괜찮은데 수백 장을 삽입하니 자꾸 다운되고…(중략)…

이전에 비슷한 것을 다룬 것도 같습니다만, 데이터의 효율적 관리 측면에서 중요한 사항이므로 다시 다루어보지요.

완성 예 — 화살표 버튼으로 상품 카탈로그 넘겨보기

예제 파일의 아래 화살표 버튼을 눌러보면, 화장품 브랜드별 상품 이미지와 정보가 한 장씩 전환되며 나타납니다. 브랜드 사이트 링크와 상품명·컨셉 설명까지 함께 표시됩니다.

워크시트는 "책상"과 비슷합니다. 그림 파일이나 데이터베이스는 "창고" 혹은 "캐비닛"과 비슷하지요. 용량을 많이 차지하는 자료들은 캐비닛이나 창고에 보관해 두고, 필요한 자료만 가져와서 책상 위에 펼쳐놓고 작업하면 효율이 나겠지요? 이미지 파일이 몇 개 안 된다면 모르겠지만, 수백·수천 개나 되는 그림을 워크시트에 직접 저장해 두면 어느 순간 파일이 무거워지다가 결국 다운되기 십상입니다.

왼쪽 화살표 코드 살펴보기

왼쪽 방향 화살표에 연결된 코드를 살펴보죠. 코딩에 들어가기 전에 몇 군데 이름 정의를 해 두었으니, 이름 상자(Name Box)를 통해 미리 살펴보시기 바랍니다.

Sub LeftArrow()

    With Range("MyIndex")
        .Value = .Value - 1
        ' 이전 이미지로 넘어가기 위해서 "MyIndex"라고 이름 붙인 영역의 값을
        ' 기존 값에서 1만큼 빼줍니다.

        If .Value < 1 Then
            ' 셀 값이 1보다 작으면 더 이상 불러올 이미지가 없다는 의미이므로 MsgBox를 보여주고,
            ' 1 이상이면 GetImageFromWeb이라는 외부 프로시저를 실행합니다.
            MsgBox "첫번째 이미지입니다", , "아이엑셀러 닷컴"
            .Value = 1
            Call GetImageFromWeb
        Else
            Call GetImageFromWeb
        End If
    End With

End Sub

GetImageFromWeb 프로시저의 내용입니다.

Sub GetImageFromWeb()

    Dim picMyShape As Picture
    Dim strPath As String
    On Error Resume Next

    ActiveSheet.Shapes("MyImage").Delete
    ' 현재 시트에 MyImage라는 이름의 도형이 있으면 지웁니다.
    ' 만약 도형이 없는데 지우라고 하면 에러 메시지가 나타날 것이므로
    ' 이 문장을 미리 써 준 겁니다.

    Range("ImageStart").Select
    strPath = "http://www.iExceller.com/images/test_image/" & "ap_" & Range("MyIndex") & ".jpg"
    ' 불러올 이미지의 웹 주소를 strPath 변수에 담아둡니다.
    ' URL과 파일의 이름을 & 연산자를 이용하여 결합했군요.
    ' http://www.iExceller.com/images/test_image/ 안에는 10개의 파일이 있는데
    ' ap_1부터 ap_10까지 10장의 사진이 들어있습니다.
    ' 파일의 이름을 지을 때에는 이처럼 특정한 규칙에 의해 지어놓으면 편리하겠지요?

    Set picMyShape = ActiveSheet.Pictures.Insert(strPath)
    picMyShape.Name = "MyImage"
    picMyShape.Width = Range("ImageStart").ColumnWidth * 52
    ' Insert 메서드를 이용하여 그림을 삽입하고 "MyImage"라는 이름을 붙입니다.
    ' 그림의 크기를 ImageStart 셀의 열 너비 X 52로 지정해 주었습니다.
    ' 왜 52냐 하면… 경험치입니다. Trial and Error의 결과!
    ActiveSheet.Hyperlinks.Add Anchor:=Range("BrandSite"), Address:=Range("SiteAddress")

End Sub

참고: 내 컴퓨터에 있는 이미지를 쓰려면?

만약 이미지가 웹이 아닌 자신의 PC에 보관되어 있다면 어떻게 해야 할까요? 예를 들어 C 드라이브의 test_image라는 폴더에 그림 파일들을 보관해 두었다면, 노란색으로 표시된 strPath 지정 부분을 아래와 같이 바꿔주면 됩니다.

strPath = "C:\\test_image\\" & "ap_" & Range("MyIndex") & ".jpg"

오른쪽 방향 화살표에 연결된 코드는 왼쪽 화살표의 그것과 거의 같으므로(1을 빼는 대신 더하고, 범위를 벗어났을 때의 최댓값만 다름) 코드에 대한 해설은 생략합니다.

<완성 예>에서 소개해 드린 형태는 상품 카탈로그라고 하기에는 좀 민망한 수준입니다만, 여기서 소개해 드린 방법을 조금만 응용한다면 충분히 제대로 된 카탈로그를 만들 수 있으리라 생각합니다. 늘 그러하듯, 구슬을 어떻게 잘 꿰어 쓰느냐가 관건이지요.

끝으로 다시 한번 강조합니다. 엑셀은 책상이지 캐비닛이나 창고가 아님을 기억하세요. 엑셀의 작업 공간에는 꼭 필요한 정보들만 올려놓고, 나머지 자료들은 하드 디스크나 서버에 보관하는 것이 좋습니다. 웹 상에 저장해두면 전 세계 어디서나 접근이 가능할 뿐 아니라, 권한을 가진 사람들만 접근할 수 있게 되어 관리하기도 훨씬 용이합니다.

정리 — 상품 카탈로그 핵심 프로시저

프로시저 역할
LeftArrow / RightArrow MyIndex 값을 1씩 감소/증가시키고 범위를 벗어나면 안내 메시지 표시
GetImageFromWeb 기존 이미지를 삭제하고 MyIndex에 해당하는 웹 이미지를 새로 불러와 삽입
Pictures.Insert(strPath) 지정한 경로(웹 URL 또는 로컬 경로)의 이미지를 워크시트에 삽입
Hyperlinks.Add 브랜드명 셀에 브랜드 사이트 주소로 연결되는 하이퍼링크 지정

자주 묻는 질문 (FAQ)

Q1. 이미지를 워크시트에 미리 삽입해 두지 않고 불러오는 이유는 무엇인가요?

이미지를 수백~수천 장씩 워크시트에 직접 삽입해 두면 파일 용량이 급격히 커지고, 심하면 응답 없음(다운) 상태가 되기 쉽습니다. 필요한 이미지만 그때그때 불러오면 워크시트를 가볍게 유지할 수 있습니다.

Q2. 웹 서버가 아니라 내 컴퓨터에 있는 이미지를 쓰려면 어떻게 하나요?

GetImageFromWeb 프로시저의 strPath 지정 부분을 웹 주소 대신 로컬 폴더 경로(예: C:\test_image\)로 바꿔 주면 됩니다. Pictures.Insert 메서드는 로컬 경로와 웹 URL을 모두 지원합니다.

Q3. 이미지 파일 이름은 꼭 ap_1.jpg처럼 번호를 붙여야 하나요?

이 예제에서는 코드가 MyIndex 값을 그대로 파일명에 결합하는 방식이라 번호 규칙을 사용했지만, 이름 규칙을 다르게 하려면 strPath를 만드는 로직(예: Select Case 문으로 인덱스와 파일명을 매칭)을 원하는 방식으로 바꾸면 됩니다.

마치며

엑셀은 책상이지 창고가 아니라는 말, 이미지를 다룰 때는 특히 새겨들을 만합니다. 무거운 자료는 서버에 두고 필요한 것만 불러와 쓰는 습관을 들여 보세요!