메뉴
실무 위키VBA 코드vbFileSearch

vbFileSearch

Function

지정한 폴더에서 파일을 정확히 일치 또는 유사 일치로 검색하는 VBA 사용자 지정 함수입니다.

vbFileSearch 코드 미리보기
구문 = vbFileSearch ( 파일명, 폴더경로, [일치옵션], [확장자], [경로출력여부] )
인수구분 형식 설명
FileName 필수 String
검색할 파일명입니다.
LookIn 필수 String
파일을 검색할 폴더 경로입니다.
ExactMatch 선택 Boolean
검색 옵션으로, TRUE일 경우 정확히 일치하는 파일을 검색합니다. 기본값은 TRUE 입니다.
FALSE로 입력하면 유사 일치로 검색되어, '사' 만 입력해도 '사과' 라는 파일이 검색됩니다.
Extension 선택 String
검색할 파일 확장자를 지정합니다. 기본값은 빈 문자열("")로, 모든 확장자를 검색합니다.
여러 개의 확장자는 쉼표(,)로 구분하여 입력합니다.
withPath 선택 Boolean
결과값에 폴더 경로를 포함할지 여부를 결정합니다. 기본값은 TRUE 입니다.
FALSE로 입력하면 폴더 경로 없이 파일명만 출력합니다.

마스터 코드

복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요
Module1 · vbFileSearch
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ vbFileSearch 함수
'▶ 지정한 폴더에 특정 확장자를 가진 파일명을 유사일치/정확히 일치로 검색합니다.
'▶ 인수 설명
'_____________FileName : 검색할 파일명입니다.
'_____________LookIn : 조회할 폴더입니다.
'_____________Extension : 특정 확장자만 조회합니다. (쉼표(,)로 구분)
'_____________ExactMatch : 정확히일치 검색 여부입니다.
'_____________withPath : True일 경우 결과값에 폴더경로를 출력합니다.
'▶ 사용된 기타 사용자지정함수
'_____________SplitFileExt 함수
'_____________IsInArray 함수
'_____________ListFiles 함수
'###############################################################
Function vbFileSearch(FileName As String, _
LookIn As String, _
Optional ExactMatch As Boolean = True, _
Optional Extension As String = "", _
Optional withPath As Boolean = True) As String
Dim sFullName As Variant
Dim sExts As Variant: Dim sExt As Variant
Dim vaArr As Variant: Dim vaRtn As Variant
Dim i As Long: Dim j As Long
vbFileSearch = "-1"
If Right(LookIn, 1) <> "\" Then LookIn = LookIn & "\"
vaArr = SplitFileExt(ListFiles(LookIn, False))
vaRtn = IsInArray(FileName, vaArr, ExactMatch, rtnArrayValue, 0)
If TypeName(vaRtn) = "Variant()" Then
If Extension = "" Then
If withPath = True Then vbFileSearch = LookIn & vaRtn(0, 0) & vaRtn(0, 1) Else: vbFileSearch = vaRtn(0, 0) & vaRtn(0, 1)
Else
sExts = Split(Extension, ",")
For Each sExt In sExts
For i = LBound(vaRtn) To UBound(vaRtn)
If StrComp(CStr(vaRtn(i, 1)), CStr("." & Trim(sExt)), vbTextCompare) = 0 Then
If withPath = True Then
vbFileSearch = LookIn & vaRtn(i, 0) & vaRtn(i, 1)
Exit Function
Else
vbFileSearch = vaRtn(i, 0) & vaRtn(i, 1)
Exit Function
End If
End If
Next
Next
vbFileSearch = "-1"
End If
Else
vbFileSearch = vaRtn
End If
End Function

활용 예제

정확히 일치 · 유사 일치로 파일 검색
vbFileSearch("Regedit", "C:\Windows\")
'// C:\Windows\regedit.exe 를 반환합니다.
vbFileSearch("Rege", "C:\Windows\")
'// '-1' 을 반환합니다.
vbFileSearch("Rege", "C:\Windows\", False)
'// C:\Windows\regedit.exe 를 반환합니다.
vbFileSearch("Regedit", "C:\Windows\", , , False)
'// regedit.exe 를 반환합니다.
시트에 입력한 파일명으로 검색 후 결과 출력
Sub Test()
Dim sName As String: Dim sPath As String
Dim sReturn As String
sName = Sheet1.Range("C2").Value
sPath = Sheet1.Range("C3").Value
sReturn = vbFileSearch(sName, sPath)
If sReturn = "-1" Then sReturn = "파일이 존재하지 않습니다.": Sheet1.Range("C5").Value = sReturn: MsgBox sReturn: Exit Sub
Sheet1.Range("C5").Value = sReturn
MsgBox sReturn & vbNewLine & _
"파일을 찾았습니다."
End Sub

안내사항

이 함수는 SplitFileExt · IsInArray · ListFiles 사용자 지정 함수를 함께 사용하므로, 세 함수를 같은 모듈에 먼저 추가해야 합니다.
파일명은 대소문자를 구분하지 않고 검색합니다.
댓글 9
5 (4개 평가)
깜돌님
깜돌님 2020.04.21 22:06
검색할 폴더를 상대경로 설정하는 방법은 없나요?
오빠두엑셀
오빠두엑셀 작성자 2020.04.22 06:51
안녕하세요?
검색할 폴더를 상대경로로 찾으시려면, vbFileSearch 앞단에서 명령문을 입력할 때 두번째 인수인 폴더경로를 동적으로 받아오도록 작성하시는게 더욱 편리하지 않을까 생각됩니다.
머털쌤
머털쌤 2020.04.22 10:10
'폴더경로를 동적으로 받아오도록 작성' 을 어떻게 하는 지 모르겠습니다.
그래서 저는 잔머리로

Set oFolder = oFSO.GetFolder(ThisWorkbook.Path & sPath)

이렇게 사용 했어요. 혹시 이렇게 하는 건가요?

아니면 동적으로 받는 방법을 알 수 있을까요?
오빠두엑셀
오빠두엑셀 작성자 2020.04.23 03:32
안녕하세요?^^
현재 실행중인 엑셀파일의 폴더경로를 받아오고자 할 경우,
Dim sPath as String
sPath = ThisWorkBook.Path

만 입력하셔도 현재 통합문서의 폴더경로를 받아옵니다.
만약 sPath 뒤로 또 다른 폴더명을 추가해야 할 경우,
Dim sPath as String
sPath = ThisWorkBook.Path
sPath = sPath & "\" & "xxxx"

로 추가하시면 됩니다.^^
답변이 도움이 되셨길 바랍니다.
머털쌤
머털쌤 2020.04.23 15:26
감사합니다.
vba 왕초보
vba 왕초보 2022.04.14 15:05
파일명은 입력하지 않고 폴더내 특정 확장자만 찾고 싶은데 위 함수를 이용할 수 있을까요?
오빠두엑셀
오빠두엑셀 작성자 2022.04.18 16:00
안녕하세요.
4번째 인수인 확장자 인수를 사용해보세요 ^^
원더우먼
원더우먼 2022.12.23 12:36
어떨때 활용하기에 좋을까요?~
강민준🤗
강민준🤗 2024.08.11 13:10
좋은 자료 감사합니다.🙇‍♂️
스크랩 완료