메뉴
실무 위키VBA 코드ListFolders

ListFolders

Function

지정한 폴더의 하위 폴더 목록을 배열로 반환하는 VBA 사용자 지정 함수입니다.

ListFolders 코드 미리보기
구문 = ListFolders ( 폴더경로, [경로포함여부] )
인수구분 형식 설명
폴더경로 필수 String
하위 폴더 목록을 반환할 대상 폴더경로입니다.
경로포함여부 선택 Boolean
TRUE일 경우 상위폴더 경로를 포함하여 반환합니다. 기본값은 FALSE 입니다.
TRUE 이면 'C:\오빠두엑셀', FALSE 이면 '오빠두엑셀' 처럼 반환합니다.

마스터 코드

복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요
Module1 · 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

안내사항

ListFolders 함수는 숨겨진 하위 폴더도 함께 반환하며, 하위 폴더가 하나도 없을 경우 값을 반환하지 않고 종료됩니다.
댓글 7
5 (4개 평가)
iviolin****
iviolin**** 2021.03.20 08:25
변수 지정과정에서 Dim oFld를 oF로 적으셨어요. 오타인것 같습니다.
폴코
폴코 2021.04.08 03:25
감사합니다. :)
뚜부
뚜부 2023.10.13 16:40
좋은 정보 고맙습니다.
문의 사항이 있습니다.
폴더가 비어있을 경우 하기 라인에서 런타임 에러가 발생합니다.
 For Each vPath In vPaths
폴더가 비어있을 경우 에러 예외 처리를 할 수 있나요?
오빠두엑셀
오빠두엑셀 작성자 2023.10.15 01:57
안녕하세요.
If Dir(vPath) Then..
으로 경로의 존재 여부를 확인하는 조건문을 한번 추가해보시면 될 것 같습니다.
감사합니다 :)
뚜부
뚜부 2023.10.16 23:54
결국 If IsArray(vPaths) Then 으로 해결했습니다.
저의 불필요한 댓글은 삭재부탁 드립니다.
오빠두엑셀
오빠두엑셀 작성자 2023.10.18 18:24
안녕하세요.
문제를 잘 해결하셨다니 정말 다행입니다.
아울러 해결방법도 같이 공유해주셔서 정말 감사드리며, 다른 댓글은 삭제해드렸습니다.
앞으로도 실무에 도움이 되는 유익한 내용을 전달해드릴 수 있도록 노력하겠습니다.
감사합니다.
강민준🤗
강민준🤗 2024.08.11 12:39
좋은 자료 감사합니다.🙇‍♂️
스크랩 완료