오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴

엑셀 ImageLookup 함수 :: VBA 전체 명령문 정리

엑셀 그림 불러오기 함수인 ImageLookup 함수에 사용된 VBA 전체 코드를 단계별로 알아봅니다.

작성자 :
오빠두엑셀
최종 수정일 : 2021. 11. 10. 02:38
URL 복사
메모 남기기 : (41)

엑셀 그림 불러오기 함수 :: ImageLookup 명령문 알아보기

구문
ImageLookup ( 파일명, [폴더경로], [일치옵션], [N/A값], [경로출력], [테두리출력], [확장자] )
설명

엑셀 ImageLookup 함수는 지정한 폴더에서 그림파일을 실시간으로 삽입하는하는 사용자지정함수입니다. VBA 사용이 어려울 경우, 엑셀 추가기능을 다운받아서 설치하면, 언제 어디서도 쉽게 ImageLookup 함수를 사용하실 수 있습니다. (엑셀 추가기능 설치방법)

ImageLookup 함수를 사용하면 아래의 장점이 있습니다.

  1. 컴퓨터의 폴더에서 그림을 직접 삽입하므로, 파일크기를 최소화하여 운용할 수 있습니다.
    - 반면, INDEX/MATCH 함수를 이용하여 그림을 삽입할 경우 모든 이미지를 파일안에 보관해야하므로 파일크기가 커지는 단점이 있습니다.
  2. 유사일치 조건으로 그림을 찾아서 삽입할 수 있습니다.
    - '사'만 입력해도 '사과', '사다리' 그림을 출력할 수 있습니다.
  3. 특정 확장자를 가진 이미지만 출력할 수 있습니다.
    - 'png' 를 입력하면 'png' 확장자를 가진 그림만 출력되고, 'jpg, bmp' 형식의 그림은 무시합니다.
  4. 한번 삽입한 그림은 다른 사람에게 공유하더라도 그림파일은 메모안에서 계속 유지됩니다.
    - 메모형식으로 그림을 삽입하므로 파일을 다른사람에게 보내도 삽입된 그림은 계속 유지됩니다.
  5. 새로고침 될 때마다 해당 경로에 위치한 그림파일로 이미지가시간 업데이트 됩니다.

예제파일 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.

  • [엑셀VBA함수] ImageLookup :: 실시간 이미지 불러오기 함수
    예제파일

ImageLookup 함수 사용예제
그림불러오기 함수 ImageLookup 사용예제
ImageLookup 함수는 그림을 실시간으로 불러옵니다.
관련 강의
  • 발주서 및 견적서에 들어가는 제품사진을 ImageLookup 함수를 응용한 실전예제퀵VBA강의 관련 포스트에서 자세히 설명드렸습니다.
  • Index/Match 함수를 사용한 그림 불러오기 방법관련포스트를 참고하세요.
인수 설명
인수 설명
파일명 검색할 파일이름입니다.
폴더경로
[선택인수]
파일을 검색할 폴더경로입니다. 기본값은 현재통합문서와 같은 경로로 지정됩니다.
일치옵션
[선택인수]
TRUE 일 경우 파일명이 정확히 일치하는 그림만 출력합니다. 기본값은 TRUE 입니다.
오류문구
[선택인수]
지정한 파일명의 이미지가 없을경우 출력할 안내문구입니다. 기본값은 "-"입니다.
파일경로출력
[선택인수]
TRUE 일 경우 그림 위로 파일경로가 출력됩니다. 기본값은 FALSE 입니다.
테두리출력
[선택인수]
TRUE 일 경우 그림에 테두리가 추가됩니다. 기본값은 FALSE 입니다.
확장자
[선택인수]
원하는 특정 확장자를 지정하여 출력할 수 있습니다. 기본값은 "png, jpeg, jpg, gif" 입니다.
함수 사용예제
=ImageLookup("사과") 
'// 통합문서와 같은 경로에 위치한 '사과' 그림파일을 출력합니다.

=ImageLookup("사과", "C:\")
'// 'C:\'에 위치한 '사과' 그림파일을 출력합니다.
=ImageLookup("사", "C:\", False) 
'// 'C:\'에 위치한 '사'를 포함한 그림파일을 출력합니다. (예: '사과', '사다리' 등..)

=ImageLookup("사과", "C:\", , , , , "png") 
'// 'C:\'에 위치한 '사과' 라는 'png' 형식의 그림파일을 출력합니다. (예: '사과.jpg'는 출력하지 않습니다.)
=ImageLookup("사과", , , , True)  
'// 그림위에 폴더경로를 출력합니다. (예: C:\사과.png)
=ImageLookup("사과", , , "그림없음")
'// 통합문서와 같은 경로에 위치한 '사과' 그림파일을 출력하고, 그림파일이 없을경우 '그림없음' 이라는 안내문구를 출력합니다.
ImageLookup 함수 전체 코드
'###############################################################
'오빠두엑셀 VBA 사용자 지정함수 (https://www.oppadu.com)
'■ ImageLookup 함수 (워크시트 함수)
'■ 폴더경로와 그림파일의 파일이름을 지정하여 '정확히일치' 또는 '유사일치'로 해당셀에 이미지를 출력합니다. (메모활용)
'■ 인수 설명
'_____________ImageName     : 검색할 이미지파일의 이름 (확장자 포함 X)
'_____________FolderPath    : 이미지를 검색할 폴더경로
'_____________ExactMatch    : 그림파일 이름 정확히 일치 검색여부
'_____________NAValue       : 그림파일 없을 시 출력할 오류 메세지
'_____________ShowImageName : 그림파일 경로 출력여부
'_____________ShowBorder    : 그림파일의 테두리 출력여부
'_____________Extension     : 특정 그림파일 형식만 검색할경우, 원하는 확장자 지정
'■ 사용된 기타 사용자지정함수
'_____________cvRng 함수
'_____________vbFileSearch 함수
'■ 그외 참고사항
'###############################################################
 
Function ImageLookup(ImageName, _
                        Optional FolderPath = "", _
                        Optional ExactMatch As Boolean = True, _
                        Optional NAvalue As String = "-", _
                        Optional ShowImageName As Boolean = False, _
                        Optional ShowBorder As Boolean = False, _
                        Optional Extension = "png, jpeg, jpg, gif")
 
 
Dim rng As Range
Dim myComment As Comment
Dim sName As String: Dim FullPath As String
 
'// 함수가 입력된 셀
Set rng = Application.Caller
sName = CStr(cvRng(ImageName))
 
'// 함수가 입력된 셀의 메모 삭제
rng.ClearComments
 
'// 참조할 파일이름이 빈칸일 경우 오류메세지 반환
If sName = "" Then ImageLookup = NAvalue: Exit Function
 
On Error GoTo EmptyFolder:
'// 폴더경로 빈칸일 경우 해당 워크시트 폴더경로 반환
If FolderPath = "" Then FolderPath = rng.Parent.Parent.Path Else: FolderPath = cvRng(FolderPath)
On Error GoTo 0
 
'// 폴더경로안에 파일 검색
FullPath = vbFileSearch(sName, CStr(FolderPath), ExactMatch, CStr(Extension))
 
'// 폴더안에 파일 존재시 함수가 입력된 셀에 메모삽입 후 이미지 출력
If FullPath <> "-1" Then
    Set myComment = rng.AddComment
 
    With myComment
        .Visible = True
 
        If sName = "" Or ShowImageName = False Then
            .Text Text:=" "
        ElseIf ShowImageName = True Then
            .Text Text:=FullPath
        End If
 
        With .Shape
                .Left = rng.Left + 3
                .Top = rng.Top + 3
 
 
                .Width = rng.MergeArea.Width - 6
                .Height = rng.MergeArea.Height - 6
 
                .Fill.UserPicture FullPath
                .Line.ForeColor.RGB = rng.Interior.Color
 
                If ShowBorder = True Then .Line.Visible = msoTrue Else: .Line.Visible = msoFalse
        End With
    End With
    ImageLookup = ""
Else
'// 폴더안에 파일 없을 경우 오류메세지 출력
    ImageLookup = NAvalue
End If
 
Exit Function
 
EmptyFolder:
ImageLookup = NAvalue: Exit Function
 
End Function

명령문 동작원리 단계별 알아보기

명령문에 사용된 인수 및 변수 목록
인수 설명
ImageName
[Variant]
불러올 파일이름입니다.
FolderPath
[Variant]
[선택인수] 불러올 그림파일의 경로입니다.
ExactMatch
[Boolean]
False일경우 유사일치로 검색합니다.
NAValue
[String]
일치하는 그림이 없을 시 출력할 안내문구입니다.
ShowImageName
[Boolean]
True일경우, 그림위에 파일경로를 출력합니다.
ShowBorder
[Boolean]
True일경우, 테두리를 출력합니다.
Extension
[Boolean]
특정 확장자를 가진 그림만 출력합니다.
rng
[Range]
그림이 출력될 셀입니다.
myComment
[Comment]
그림을 삽입할 메모입니다.
sName
[String]
셀에 표시될 안내문구입니다.
FullPath
[String]
불러올 그림의 전체 파일경로입니다.
명령문 동작 원리
  1. ImageLookup 함수가 입력된 셀을 변수로 설정한 뒤, 기존에 있던 메모를 삭제합니다.
    '// 함수가 입력된 셀
    Set rng = Application.Caller
    sName = CStr(cvRng(ImageName))
     
    '// 함수가 입력된 셀의 메모 삭제
    rng.ClearComments
  2. 파일이름 또는 폴더경로가 빈칸일 경우를 대비하여 예외처리 코드를 작성합니다.
    '// 참조할 파일이름이 빈칸일 경우 오류메세지 반환
    If sName = "" Then ImageLookup = NAvalue: Exit Function
     
    On Error GoTo EmptyFolder:
    '// 폴더경로 빈칸일 경우 해당 워크시트 폴더경로 반환
    If FolderPath = "" Then FolderPath = rng.Parent.Parent.Path Else: FolderPath = cvRng(FolderPath)
    On Error GoTo 0
  3. vbFileSearch 함수를 사용해 지정한 폴더경로 안에서 그림 파일을 검색합니다.
    '// 폴더경로안에 파일 검색
    FullPath = vbFileSearch(sName, CStr(FolderPath), ExactMatch, CStr(Extension))
  4. 폴더안에 파일이 존재할 경우, 셀 안에 메모를 추가합니다. 이후 사용자 설정(테두리, 폴더경로 등)에 따라 그림을 삽입합니다.
    If FullPath <> "-1" Then
        Set myComment = rng.AddComment
     
        With myComment
            .Visible = True
     
            If sName = "" Or ShowImageName = False Then
                .Text Text:=" "
            ElseIf ShowImageName = True Then
                .Text Text:=FullPath
            End If
     
            With .Shape
                    .Left = rng.Left + 3
                    .Top = rng.Top + 3
     
     
                    .Width = rng.MergeArea.Width - 6
                    .Height = rng.MergeArea.Height - 6
     
                    .Fill.UserPicture FullPath
                    .Line.ForeColor.RGB = rng.Interior.Color
     
                    If ShowBorder = True Then .Line.Visible = msoTrue Else: .Line.Visible = msoFalse
            End With
        End With
        ImageLookup = ""
  5. 폴더안에 파일이 없을경우 (-1 반환), 오류 문구를 출력한 뒤 함수를 종료합니다.
    Else
    '// 폴더안에 파일 없을 경우 오류메세지 출력
        ImageLookup = NAvalue
    End If
댓글 41
5 (19개 평가)
하람군
하람군 2020.02.16 19:39
예제파일이 없어요
오빠두엑셀
오빠두엑셀 작성자 2020.02.17 00:12
안녕하세요!^^* 파일에 오류가 있었습니다. 수정했으니 다시 확인해주시겠어요? 감사합니다.
라온쟤나
라온쟤나 2020.02.20 15:20
예제파일을 다운로드 하려면 이페이지를 표시할수 없습니다 라고 표시되고 다운로드가 안되는데 왜그럴까요 ㅜㅜ
오빠두엑셀
오빠두엑셀 작성자 2020.02.20 23:10
안녕하세요~^^* 예제파일은 구글드라이브에서 연동되어 있습니다. 회사 방화벽으로 파일 다운로드가 제한되어있는지 확인해보시겠어요? 감사합니다 ^-^
김다솜
김다솜 2020.02.21 14:17
안녕하세요 유튜부 잘 보고 잇습니다~ 거래처에 공유할 목적으로 사용한다면 사진있는 폴더까지 같이 보내야 사진이 출력이 될까요? 엑셀 값 붙여넣기 해서 함수나 메크로등 포함하지 않고 보내고 싶은데..
오빠두엑셀
오빠두엑셀 작성자 2020.02.22 06:58
안녕하세요!^-^ 이미지를 같이 보내지 않으셔도 저장되어 있던 이미지는 잘 출력됩니다. 감사합니다.
정수협
정수협 2020.06.02 13:26
Imagelookup 함수 잘 사용하고 있습니다. 예를 들어 엑셀파일 A업체 B업체 자료와 각각의 폴더에서 사용할 경우 계속 확인을 해야 하더군요. 엑셀에 추가기능을 한번만 하면 경로와 상관없이 A업체 폴더와 B업체 폴더 열때 확인하지 않고 열리게 할수는 없을까요?
오빠두엑셀
오빠두엑셀 작성자 2020.06.02 18:54
If FolderPath = "" Then  FolderPath = rng.Parent.Parent.Path  Else: FolderPath = cvRng(FolderPath)
이 부분을
Dim Folder As Object
Dim SubFolder As Object
Set Folder = CreateObject("Scripting.FileSystemObject")
    
For Each SubFolder In Folder.GetFolder("상위폴더경로").SubFolders
        FolderPath = SubFolder
 

' 기존 명령문

Next
로 변경하시면 상위폴더의 하위폴더들을 모두 돌아가며 이미지를 검색합니다 ^^
정수협
정수협 2020.07.31 21:16
감사합니다. 좋은 강의 잘보고 있습니다.
매린이
매린이 2020.07.06 21:46
네이버클라우드 같은 공유폴더에있는 이미지를 각각 사용자피씨에 따라 경로로 잡을 수 있을까요?
오빠두엑셀
오빠두엑셀 작성자 2020.07.07 10:34
만약 네이버클라우드로 공유되는 상위 폴더의 경로가 동일하다면 가능합니다.^^
Mario
Mario 2020.07.20 10:59
imgaelookup 함수로 사진을 불러 왔습니다. 그런데 프린터를 하면 사진은 프린터가 되지가 않습니다. 왜 그럴까요
오빠두엑셀
오빠두엑셀 작성자 2020.07.20 11:05
안녕하세요? :) 아래 링크의 자주묻는질문, 첫번째 글을 확인해보시겠어요? https://www.oppadu.com/%ec%97%91%ec%85%80-%ea%b7%b8%eb%a6%bc-%eb%b6%88%eb%9f%ac%ec%98%a4%ea%b8%b0-%ed%95%a8%ec%88%98/ 감사합니다.
정승훈
정승훈 2020.08.13 15:34
안녕하세요 imagelookup 함수 정말 놀라워요. 그런데 불러올 파일이름이 파일명을 직접 입력하는게 아닌 파일명이 적혀있는 셀을 선택했을때 불러올수 있게 하는 방법은 없나요? -------- 셀을 따옴표 없이 선택하면 되네요. 감사합니다 잘쓸게요^^
shon
shon 2020.08.19 13:27
안녕하세요. 너무 잘쓰고있습니다. 근데 일전에도 비슷한 질문이 있었지만 이미지가 200개 이상 호출시 엑셀이 많이 느려지는데요. 혹시 이미지를 ftp에 넣고 이걸 불러내는 방식으로하면 좀더 가벼워질거 같은데 방법이 따로 있을까요?
오빠두엑셀
오빠두엑셀 작성자 2020.08.19 23:50
안녕하세요. ImageLookup 기능을 함수로 사용하게 되면, 이미지를 불러오기 위해 파일호출을 200번 하면서 동시에 200번의 업데이트가 발생합니다. 이는 함수로 구동할 경우 불가피하게 발생되는 문제점입니다. 이 문제를 해결하려면 함수형태로 작성된 코드를 명령문 형태로 수정해서, 파일호출을 200번 하되 업데이트는 1번만 하도록 수정해주셔야 합니다. 어느정도 코딩에 대한 지식이 있을 경우 쉽게 해결가능한 문제지만, 그렇지 않으시다면 코딩 공부가 필요한 부분입니다. 답변이 도움이 되셨길 바랍니다.^^
sjw
sjw 2020.10.07 17:10
안녕하세요 imagelookup 너무 유용하게 사용하고 있습니다. 감사합니다. 위 댓글과 비슷하게 여러 사진 입력 시 사진 외의 셀의 내용이 수정되어도 업데이트가 발생하는지 버퍼링이 생기는데, [함수형태로 작성된 코드를 명령문 형태로 수정해서, 파일호출을 200번 하되 업데이트는 1번만 하도록 수정] 하는 방법이 궁금합니다!
오빠두엑셀
오빠두엑셀 작성자 2020.10.08 02:08
안녕하세요. 질문주신 내용을 구현하려면 우선 VBA 코드 작성에 대한 전반적인 이해가 필요합니다. :) 만약 Function 과 Sub 의 차이점이 궁금하시다면, 관련 설명은 아래 두 링크를 확인하면 도움이 되실 듯 합니다. http://triki.net/prgm/2493 https://www.excelfunctions.net/vba-functions-and-subroutines.html ImageLookup을 명령문으로 구현하시려면, 기존 함수의 전반적인 수정이 필요한데요. 명령문으로 구현하신다면 메모형식이 아닌 그림을 직접 삽입하는 방식으로 구현하시는게 좋습니다. 시트 안에 그림을 삽입하는 방법에 대한 VBA 예제는 아래 StackOverFlow 링크를 참고하면 도움이 되실 듯 합니다. https://stackoverflow.com/questions/12936646/how-to-insert-a-picture-into-excel-at-a-specified-cell-position-with-vba 답변이 도움이 되셨길 바랍니다. :)
디마고
디마고 2020.10.28 17:21
웹에 위치한 이미지 URL을 통해 엑셀에 이미지를 표시 셀 높이와 연동 위와 같은 기능을 가진 함수가 있었으면 하네요.
오빠두엑셀
오빠두엑셀 작성자 2020.10.28 22:42
네 말씀하신 기능을 가진 추가기능 툴을 곧 올려드릴 예정입니다. :)
디마고
디마고 2020.10.29 08:24
없는게 없군요! 기대하겠습니다!
자기자기
자기자기 2021.01.20 07:55
VBA몰라도 모듈만 붙여넣으니까 작동 되네요!! 진짜 감사합니다