엑셀 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 홈페이지 관련링크를 참고하세요.

5 4 투표
게시글평점
9 댓글
Inline Feedbacks
모든 댓글 보기
9
0
여러분의 생각을 댓글로 남겨주세요.x