엑셀 폴더 목록 추출 :: ListFolders 명령문 사용법 총정리

엑셀 특정 경로의 폴더 목록을 반환하는 ListFolders 함수의 사용법 및 전체 명령문 동작원리를 살펴봅니다.

홈페이지 » 엑셀 폴더 목록 추출 자동화 :: ListFolders 함수

작성자 :
오빠두엑셀
최종 수정일 : 2021. 06. 28. 20:53
URL 복사
메모 남기기 : (2)

엑셀 폴더 목록 추출 :: ListFolders 함수 사용법 정리

엑셀 ListFolders 함수 목차 바로가기
요약

엑셀 ListFolders 명령문은 특정 경로의 하위 폴더 목록을 배열로 반환하는 사용자지정함수입니다.

명령문 구문
= ListFolders ( 폴더경로, [경로포함여부] )
사용된 인수 및 변수 알아보기
인수 설명
폴더경로
[String]
하위 폴더 목록을 반환할 대상 폴더경로입니다.
경로포함여부
[선택인수, Boolean]
TRUE 일 경우 상위폴더 경로를 포함하여 반환합니다. 기본값은 FALSE 입니다.

  • TRUE : 상위폴더 경로 포함 (C:\오빠두엑셀)
  • 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
실전 사용 예제
  1. C:\ 의 하위 폴더 목록을 배열로 반환하기
    Sub Test1()
     
    Dim Arr as Array
    Arr = ListFolders("C:\")
    '// C:\ 상위폴더 경로를 포함하지 않은 하위폴더 목록을 배열로 반환합니다. (예: Program Files, ...등)
     
    End Sub
  2. 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
명령문 동작원리 단계별 알아보기
  1. 폴더 목록을 받아오기 위한 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
  2. 오류처리를 합니다.
    - 하위폴더 경로가 하나도 없을 경우 함수를 종료합니다.
    - 폴더경로 뒤에 "\" 표시가 없을 경우 올바른 결과값 출력을 위하여 폴더경로 뒤에 "\"를 추가합니다.
    '// 변수를 설정합니다.
    i = 1
    If oFlds.Count = 0 Then Exit Function
    If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
  3. 결과값으로 출력 될 배열을 생성한 뒤, 배열 안으로 각 하위폴더를 하나씩 추가합니다.
    '// 폴더에 하위폴더가 하나라도 존재시 배열 생성합니다.
    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
  4. ListFolders 결과값으로 배열을 반환한 뒤 함수를 종료합니다.
    '// 배열을 결과값으로 출력합니다.
    ListFolders = arr

관련링크 : MS 홈페이지 FileSystemObject.GetFolder 속성 상세설명 (영문)

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