이 페이지에서
구문
= vbFileSearch ( 파일명, 폴더경로, [일치옵션], [확장자], [경로출력여부] )
인수구분
형식 설명
FileName
필수
String
검색할 파일명입니다.
LookIn
필수
String
파일을 검색할 폴더 경로입니다.
ExactMatch
선택
Boolean
검색 옵션으로, TRUE일 경우 정확히 일치하는 파일을 검색합니다. 기본값은 TRUE 입니다.
FALSE로 입력하면 유사 일치로 검색되어, '사' 만 입력해도 '사과' 라는 파일이 검색됩니다.
Extension
선택
String
검색할 파일 확장자를 지정합니다. 기본값은 빈 문자열("")로, 모든 확장자를 검색합니다.
여러 개의 확장자는 쉼표(,)로 구분하여 입력합니다.
withPath
선택
Boolean
결과값에 폴더 경로를 포함할지 여부를 결정합니다. 기본값은 TRUE 입니다.
FALSE로 입력하면 폴더 경로 없이 파일명만 출력합니다.
마스터 코드
복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요'###############################################################
'오빠두엑셀 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 사용자 지정 함수를 함께 사용하므로, 세 함수를 같은 모듈에 먼저 추가해야 합니다.
파일명은 대소문자를 구분하지 않고 검색합니다.
검색할 폴더를 상대경로로 찾으시려면, vbFileSearch 앞단에서 명령문을 입력할 때 두번째 인수인 폴더경로를 동적으로 받아오도록 작성하시는게 더욱 편리하지 않을까 생각됩니다.
그래서 저는 잔머리로
Set oFolder = oFSO.GetFolder(ThisWorkbook.Path & sPath)
이렇게 사용 했어요. 혹시 이렇게 하는 건가요?
아니면 동적으로 받는 방법을 알 수 있을까요?
현재 실행중인 엑셀파일의 폴더경로를 받아오고자 할 경우,
sPath = ThisWorkBook.Path
만 입력하셔도 현재 통합문서의 폴더경로를 받아옵니다.
만약 sPath 뒤로 또 다른 폴더명을 추가해야 할 경우,
sPath = ThisWorkBook.Path
sPath = sPath & "\" & "xxxx"
로 추가하시면 됩니다.^^
답변이 도움이 되셨길 바랍니다.
4번째 인수인 확장자 인수를 사용해보세요 ^^