폴더 안의 파일을 검색하는 명령문 : 엑셀 vbFileSearch 함수
구문
vbFileSearch ( 파일명, 폴더경로, [일치옵션], [확장자], [경로출력여부] )
설명
엑셀 vbFileSearch 명령문은 지정한 폴더 안의 파일을 찾아주는 함수입니다. 필요에따라 정확히일치 또는 유사일치로 검색할 수 있습니다.
파일명은 대소문자 상관없이 검색합니다. 즉 apple.png 를 검색해도 APPLE.png 를 출력합니다. 만약 대소문자를 구분하여 검색하고자 할 경우, IsInArray 함수의 vbCompare 옵션을 변경합니다.
vbFileSearch의 파일검색 기본 옵션은 '정확히일치' 입니다. 즉 '사과'라는 파일을 검색할 경우, '사과'라는 단어를 정확히 입력해야 검색됩니다. 필요시 '유사일치'로 검색할 수 있습니다. 3번째 인수인 [일치옵션]을 False로 입력하면 파일명을 유사일치로 검색합니다. 예를 들어, '사' 만 입력해도 '사과' 라는 파일이 검색됩니다.
[경로출력여부]를 False로 할 경우, 파일의 폴더경로 없이 '파일명'만 출력됩니다. 만약 확장자 없이 온전한 '파일이름'만 출력할 경우 SplitFileExt 함수를 사용할 수 있습니다.

- 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를 반환합니다.
사용된 보조 함수
예제파일 다운로드
오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.
- [VBA예제] vbFileSearch 명령문예제파일
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 명령문 상세설명
사용예제
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
인수설명
vbFileSearch 명령문에는 총 5개의 인수가 들어갑니다.
인수 설명 FileName
[String]검색할 파일명입니다. LookIn
[String]파일을 검색할 폴더 경로입니다. ExactMatch
[Boolean, 선택인수]검색옵션입니다. True일 경우 정확히 일치하는 파일을 검색합니다. 기본값은 TRUE 입니다. Extension
[String, 선택인수]파일 확장자를 지정하여 검색합니다. 기본값은 모든 공백(="") 모든 확장자 검색입니다. withPath
[Boolean, 선택인수]결과값에 경로를 포함할지 여부를 결정합니다. Ture일 경우 결과값에 폴더경로를 포함합니다. 기본값은 TRUE 입니다. 명령문 동작원리
vbFileSearch 명령문에 사용된 변수는 아래와 같습니다.
- sExts, sExt : 특정 확장자를 지정할 경우 생성합니다. 확장자가 입력된 배열입니다.
- vaArr : 검색할 폴더에서 확장자를 분리하여 받아온 온전한 파일이름이 입력된 배열입니다.
- vaRtn : vaArr에서 찾고자 하는 파일이 이름이 존재할경우, 반환되는 배열입니다.
- i , j : For문위한 Counter 입니다.
- 특정 확장자를 지정하지 않았을경우, vbRtn 으로 반환된 배열 중 첫번째 값을 결과값으로 출력 후 함수를 종료합니다.
If Extension = "" Then If withPath = True Then vbFileSearch = LookIn & vaRtn(0, 0) & vaRtn(0, 1) Else: vbFileSearch = vaRtn(0, 0) & vaRtn(0, 1) End If
- 특정 확장자를 지정했을경우, vbRtn 배열의 확장자를 하나씩 검색합니다. 일치하는 확장자가 있을시 vbFileSearch의 결과값으로 반환합니다. 만약 일치하는 확장자가 없을 경우 '-1'을 반환한 뒤 함수를 종료합니다.
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"
자주묻는 질문
Q. Application.FileSearch 함수가 있는데 vbFileSearch 명령문이 따로 필요한가요?
Application.FileSearch 명령문은 엑셀 2007 이후 버전부터 지원이 중단되었습니다. 따라서 별도의 사용자지정함수로만 파일검색이 가능해졌습니다. 자세한 내용은 MS 홈페이지 관련링크를 참고하세요.

검색할 폴더를 상대경로로 찾으시려면, vbFileSearch 앞단에서 명령문을 입력할 때 두번째 인수인 폴더경로를 동적으로 받아오도록 작성하시는게 더욱 편리하지 않을까 생각됩니다.
그래서 저는 잔머리로
Set oFolder = oFSO.GetFolder(ThisWorkbook.Path & sPath)
이렇게 사용 했어요. 혹시 이렇게 하는 건가요?
아니면 동적으로 받는 방법을 알 수 있을까요?
현재 실행중인 엑셀파일의 폴더경로를 받아오고자 할 경우,
sPath = ThisWorkBook.Path
만 입력하셔도 현재 통합문서의 폴더경로를 받아옵니다.
만약 sPath 뒤로 또 다른 폴더명을 추가해야 할 경우,
sPath = ThisWorkBook.Path
sPath = sPath & "\" & "xxxx"
로 추가하시면 됩니다.^^
답변이 도움이 되셨길 바랍니다.
4번째 인수인 확장자 인수를 사용해보세요 ^^