엑셀 폴더 목록 추출 :: ListFolders 함수 사용법 정리
엑셀 ListFolders 함수 목차 바로가기
요약
엑셀 ListFolders 명령문은 특정 경로의 하위 폴더 목록을 배열로 반환하는 사용자지정함수입니다.
명령문 구문
= ListFolders ( 폴더경로, [경로포함여부] )
사용된 인수 및 변수 알아보기
인수 | 설명 |
폴더경로 [String] |
하위 폴더 목록을 반환할 대상 폴더경로입니다. |
경로포함여부 [선택인수, Boolean] |
TRUE 일 경우 상위폴더 경로를 포함하여 반환합니다. 기본값은 FALSE 입니다.
|
예제파일 다운로드
오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.
- [VBA예제] ListFolders 함수 - 예제파일예제파일
상세 설명
엑셀 ListFolders 함수는 특정 폴더의 하위폴더 목록을 배열로 반환하는 사용자지정함수입니다. ListFolders 함수는 숨겨진 하위 폴더도 결과값으로 반환합니다.
두번째 인수인 [경로포함여부]를 TRUE로 할 경우 상위폴더경로를 포함한 값을 결과로 출력하며 기본값은 FALSE 입니다. 특정 폴더 안의 파일 목록을 배열로 반환하려면 ListFiles 함수를 사용하세요.
특정 폴더 내 파일을 정확히 일치 또는 유사일치로 검색해야 할 경우 vbFileSearch 함수를 사용하면 더욱 편리합니다.
엑셀 폴더 목록 추출, ListFolders 명령문 동작원리
ListFolders 명령문 전체 코드
'############################################################### '오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com) '▶ ListFolders 함수 '▶ 선택한 폴더의 하위폴더 목록을 배열로 반환합니다. '▶ 인수 설명 '_____________sPath : 하위 폴더목록을 출력할 폴더 경로입니다. '_____________withPath : 상위폴더 경로를 같이 출력할 여부를 결정합니다. '############################################################### Function ListFolders(sPath As String, Optional withPath As Boolean = False) '// 각 변수를 생성합니다. Dim arr As Variant Dim i As Integer Dim oFSO As Object: Dim oFolder As Object: Dim oFlds As Object: Dim oF As Object Set oFSO = CreateObject("Scripting.FileSystemObject") Set oFolder = oFSO.GetFolder(sPath) Set oFlds = oFolder.SubFolders '// 변수를 설정합니다. i = 1 If oFlds.Count = 0 Then Exit Function If Right(sPath, 1) <> "\" Then sPath = sPath & "\" '// 폴더에 하위폴더가 하나라도 존재시 배열 생성합니다. ReDim arr(1 To oFlds.Count) '// 각 파일을 돌아가며 Arr 배열로 반환합니다. For Each oFld In oFlds If withPath = False Then arr(i) = oFld.Name Else: arr(i) = sPath & oFld.Name i = i + 1 Next '// 배열을 결과값으로 출력합니다. ListFolders = arr End Function
실전 사용 예제
- C:\ 의 하위 폴더 목록을 배열로 반환하기
Sub Test1() Dim Arr as Array Arr = ListFolders("C:\") '// C:\ 상위폴더 경로를 포함하지 않은 하위폴더 목록을 배열로 반환합니다. (예: Program Files, ...등) End Sub
- C:\ 의 하위 폴더 목록을 메세지 박스로 출력하기
Sub Test2() Dim vPath As Variant Dim vPaths As Variant Dim sResult As String vPaths = ListFolders(Sheet1.Range("B3").Value, True) For Each vPath In vPaths sResult = sResult & vPath & vbNewLine Next MsgBox sResult End Sub
명령문 동작원리 단계별 알아보기
- 폴더 목록을 받아오기 위한 FileSystemObject 개체를 생성합니다.
'// 각 변수를 생성합니다. Dim arr As Variant Dim i As Integer Dim oFSO As Object: Dim oFolder As Object: Dim oFlds As Object: Dim oF As Object Set oFSO = CreateObject("Scripting.FileSystemObject") Set oFolder = oFSO.GetFolder(sPath) Set oFlds = oFolder.SubFolders
- 오류처리를 합니다.
- 하위폴더 경로가 하나도 없을 경우 함수를 종료합니다.
- 폴더경로 뒤에 "\" 표시가 없을 경우 올바른 결과값 출력을 위하여 폴더경로 뒤에 "\"를 추가합니다.'// 변수를 설정합니다. i = 1 If oFlds.Count = 0 Then Exit Function If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
- 결과값으로 출력 될 배열을 생성한 뒤, 배열 안으로 각 하위폴더를 하나씩 추가합니다.
'// 폴더에 하위폴더가 하나라도 존재시 배열 생성합니다. ReDim arr(1 To oFlds.Count) '// 각 파일을 돌아가며 Arr 배열로 반환합니다. For Each oFld In oFlds If withPath = False Then arr(i) = oFld.Name Else: arr(i) = sPath & oFld.Name i = i + 1 Next
- ListFolders 결과값으로 배열을 반환한 뒤 함수를 종료합니다.
'// 배열을 결과값으로 출력합니다. ListFolders = arr
- C:\ 의 하위 폴더 목록을 배열로 반환하기