메뉴
실무 위키VBA 코드ImageLookup

ImageLookup

Function

지정한 폴더에서 그림 파일을 찾아 셀 안에 실시간으로 삽입하는 VBA 사용자 지정 함수입니다.

ImageLookup 코드 미리보기
구문 = ImageLookup ( 파일명, [폴더경로], [일치옵션], [N/A값], [경로출력], [테두리출력], [확장자] )
인수구분 형식 설명
파일명 필수 Variant
검색할 그림 파일의 이름입니다.
확장자는 포함하지 않습니다.
폴더경로 선택 Variant
파일을 검색할 폴더 경로입니다. 기본값은 현재 통합문서와 같은 경로입니다.
일치옵션 선택 Boolean
TRUE 일 경우 파일명이 정확히 일치하는 그림만 출력합니다. 기본값은 TRUE 입니다.
FALSE 일 경우 유사일치로 검색합니다.
오류문구 선택 String
지정한 파일명의 이미지가 없을 경우 출력할 안내문구입니다. 기본값은 "-" 입니다.
파일경로출력 선택 Boolean
TRUE 일 경우 그림 위로 파일 경로가 출력됩니다. 기본값은 FALSE 입니다.
테두리출력 선택 Boolean
TRUE 일 경우 그림에 테두리가 추가됩니다. 기본값은 FALSE 입니다.
확장자 선택 Variant
출력할 그림 파일의 확장자를 지정합니다. 기본값은 "png, jpeg, jpg, gif" 입니다.
예를 들어 'png' 를 입력하면 png 확장자를 가진 그림만 출력하고 jpg, bmp 형식은 무시합니다.

마스터 코드

복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요
Module1 · 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

활용 예제

기본 사용 — 파일명으로 그림 삽입
= ImageLookup ( "사과" )
'// 통합문서와 같은 경로에 위치한 '사과' 그림파일을 출력합니다.
= ImageLookup ( "사과", "C:\" )
'// 'C:\'에 위치한 '사과' 그림파일을 출력합니다.
유사일치 검색 · 확장자 지정
= ImageLookup ( "사", "C:\", False )
'// 'C:\'에 위치한 '사'를 포함한 그림파일을 출력합니다. (예: '사과', '사다리' 등..)
= ImageLookup ( "사과", "C:\", , , , , "png" )
'// 'C:\'에 위치한 '사과' 라는 'png' 형식의 그림파일을 출력합니다. (예: '사과.jpg'는 출력하지 않습니다.)

안내사항

실행하려면 cvRng 함수와 vbFileSearch 함수를 모듈에 함께 추가해야 합니다.
그림은 셀 메모(Comment) 안에 삽입되므로 파일을 다른 사람에게 보내도 삽입된 그림이 그대로 유지됩니다.
댓글 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몰라도 모듈만 붙여넣으니까 작동 되네요!! 진짜 감사합니다
스크랩 완료