엑셀 그림 불러오기 함수 :: ImageLookup 명령문 알아보기
구문
ImageLookup ( 파일명, [폴더경로], [일치옵션], [N/A값], [경로출력], [테두리출력], [확장자] )
설명
엑셀 ImageLookup 함수는 지정한 폴더에서 그림파일을 실시간으로 삽입하는하는 사용자지정함수입니다. VBA 사용이 어려울 경우, 엑셀 추가기능을 다운받아서 설치하면, 언제 어디서도 쉽게 ImageLookup 함수를 사용하실 수 있습니다. (엑셀 추가기능 설치방법)
ImageLookup 함수를 사용하면 아래의 장점이 있습니다.
- 컴퓨터의 폴더에서 그림을 직접 삽입하므로, 파일크기를 최소화하여 운용할 수 있습니다.
- 반면, INDEX/MATCH 함수를 이용하여 그림을 삽입할 경우 모든 이미지를 파일안에 보관해야하므로 파일크기가 커지는 단점이 있습니다. - 유사일치 조건으로 그림을 찾아서 삽입할 수 있습니다.
- '사'만 입력해도 '사과', '사다리' 그림을 출력할 수 있습니다. - 특정 확장자를 가진 이미지만 출력할 수 있습니다.
- 'png' 를 입력하면 'png' 확장자를 가진 그림만 출력되고, 'jpg, bmp' 형식의 그림은 무시합니다. - 한번 삽입한 그림은 다른 사람에게 공유하더라도 그림파일은 메모안에서 계속 유지됩니다.
- 메모형식으로 그림을 삽입하므로 파일을 다른사람에게 보내도 삽입된 그림은 계속 유지됩니다. - 새로고침 될 때마다 해당 경로에 위치한 그림파일로 이미지가실시간 업데이트 됩니다.
예제파일 다운로드
오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.

관련 강의
- 발주서 및 견적서에 들어가는 제품사진을 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("사과", "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] |
불러올 그림의 전체 파일경로입니다. |
명령문 동작 원리
- ImageLookup 함수가 입력된 셀을 변수로 설정한 뒤, 기존에 있던 메모를 삭제합니다.
'// 함수가 입력된 셀 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
- vbFileSearch 함수를 사용해 지정한 폴더경로 안에서 그림 파일을 검색합니다.
'// 폴더경로안에 파일 검색 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 = ""
- 폴더안에 파일이 없을경우 (-1 반환), 오류 문구를 출력한 뒤 함수를 종료합니다.
Else '// 폴더안에 파일 없을 경우 오류메세지 출력 ImageLookup = NAvalue End If