폴더 안의 파일을 검색하는 명령문 : 엑셀 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 홈페이지 관련링크를 참고하세요.