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

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

홈페이지 » 엑셀 ImageLookup 함수 :: VBA 전체 명령문 정리

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

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

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

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

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

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

명령문에 사용된 인수 및 변수 목록
인수/변수명데이터형식설명기본값
ImageNameVariant불러올 파일이름입니다.-
FolderPathVariant[선택인수] 불러올 그림파일의 경로입니다.통합문서 저장경로
ExactMatchBooleanFalse일경우 유사일치로 검색합니다.True
NAValueString일치하는 그림이 없을 시 출력할 안내문구입니다."-"
ShowImageNameBooleanTrue일경우, 그림위에 파일경로를 출력합니다.False
ShowBorderBooleanTrue일경우, 테두리를 출력합니다.False
ExtensionString특정 확장자를 가진 그림만 출력합니다."png, jpeg, jpg, gif"
rngRange그림이 출력될 셀입니다.-
myCommentComment그림을 삽입할 메모입니다.-
sNameString셀에 표시될 안내문구입니다.-
FullPathString불러올 그림의 전체 파일경로입니다.-
명령문 동작 원리
  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
5 6 votes
게시글평점
현재 페이지 댓글알림 신청
알림 설정
guest
13 Comments
Inline Feedbacks
View all comments
하람군
하람군
2020년 2월 16일 7:39 오후
게시글평점 :
     

예제파일이 없어요

라온쟤나
라온쟤나
2020년 2월 20일 3:20 오후
게시글평점 :
     

예제파일을 다운로드 하려면 이페이지를 표시할수 없습니다 라고 표시되고 다운로드가 안되는데
왜그럴까요 ㅜㅜ

김다솜
김다솜
2020년 2월 21일 2:17 오후
게시글평점 :
     

안녕하세요 유튜부 잘 보고 잇습니다~ 거래처에 공유할 목적으로 사용한다면 사진있는 폴더까지 같이 보내야 사진이 출력이 될까요? 엑셀 값 붙여넣기 해서 함수나 메크로등 포함하지 않고 보내고 싶은데..

정수협
정수협
2020년 6월 2일 1:26 오후
게시글평점 :
     

Imagelookup 함수 잘 사용하고 있습니다. 예를 들어 엑셀파일 A업체 B업체 자료와 각각의 폴더에서 사용할 경우 계속 확인을 해야 하더군요. 엑셀에 추가기능을 한번만 하면 경로와 상관없이 A업체 폴더와 B업체 폴더 열때… 더보기 »

정수협
정수협
2020년 7월 31일 9:16 오후

감사합니다. 좋은 강의 잘보고 있습니다.

매린이
매린이
2020년 7월 6일 9:46 오후
게시글평점 :
     

네이버클라우드 같은 공유폴더에있는 이미지를 각각 사용자피씨에 따라 경로로 잡을 수 있을까요?

Mario
Mario
2020년 7월 20일 10:59 오전
게시글평점 :
     

imgaelookup 함수로 사진을 불러 왔습니다.
그런데 프린터를 하면 사진은 프린터가 되지가 않습니다.
왜 그럴까요

13
0
여러분의 생각을 댓글로 남겨주세요.x