오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴

엑셀 vbFileSearch 명령문 사용법 및 전체 명령문 :: 폴더 파일 찾기 함수

특정 폴더 안의 파일을 정확히/유사일치로 검색하는 vbFileSearch 함수의 사용법 및 전체명령문 동작원리를 알아봅니다.

작성자 :
오빠두엑셀
최종 수정일 : 2021. 10. 31. 16:22
URL 복사
메모 남기기 : (9)

폴더 안의 파일을 검색하는 명령문 : 엑셀 vbFileSearch 함수

구문

vbFileSearch ( 파일명, 폴더경로, [일치옵션], [확장자], [경로출력여부] )

설명

엑셀 vbFileSearch 명령문은 지정한 폴더 안의 파일을 찾아주는 함수입니다. 필요에따라 정확히일치 또는 유사일치로 검색할 수 있습니다.

파일명은 대소문자 상관없이 검색합니다. 즉 apple.png 를 검색해도 APPLE.png 를 출력합니다. 만약 대소문자를 구분하여 검색하고자 할 경우, IsInArray 함수의 vbCompare 옵션을 변경합니다.

vbFileSearch의 파일검색 기본 옵션은 '정확히일치' 입니다. 즉 '사과'라는 파일을 검색할 경우, '사과'라는 단어를 정확히 입력해야 검색됩니다. 필요시 '유사일치'로 검색할 수 있습니다. 3번째 인수인 [일치옵션]을 False로 입력하면 파일명을 유사일치로 검색합니다. 예를 들어, '사' 만 입력해도 '사과' 라는 파일이 검색됩니다.

[경로출력여부]를 False로 할 경우, 파일의 폴더경로 없이 '파일명'만 출력됩니다. 만약 확장자 없이 온전한 '파일이름'만 출력할 경우 SplitFileExt 함수를 사용할 수 있습니다.

엑셀 vba 폴더 파일 검색 함수 vbFileSearch 함수
vbFileSearch 함수로 특정 폴더 내 파일을 검색합니다.
  • 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를 반환합니다.
사용된 보조 함수

예제파일 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.


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 입니다.
  1. 특정 확장자를 지정하지 않았을경우, 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
  2. 특정 확장자를 지정했을경우, 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 홈페이지 관련링크를 참고하세요.

댓글 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
좋은 자료 감사합니다.🙇‍♂️