오빠두엑셀 `2026 무료 챌린지` 오픈! 완주하고 수료증 받아가세요! 5년 연속 IT분야 베스트셀러! 「 진짜쓰는 실무엑셀 」로 2026년 공부 끝내기 엑셀이 막히셨나요? Q&A 게시판에서 바로 해결하세요.
메뉴

엑셀 ListFiles 명령문 사용법 및 전체 명령문 :: 폴더 내 파일 목록 출력

폴더 내 파일 목록을 출력하는 ListFiles 함수의 사용법 및 전체명령문 동작원리를 알아봅니다.

작성자 :
오빠두엑셀
최종 수정일 : 2022. 11. 16. 03:39
URL 복사
메모 남기기 : (11)

폴더 내 파일 목록을 출력하는 함수 : 엑셀 ListFiles 함수

구문
ListFiles ( 폴더경로, [경로출력여부], [하위폴더포함], [최대깊이] )
설명

엑셀 ListFiles 함수는 폴더 경로안에 파일 목록을 반환하는 함수입니다. 폴더 내 숨겨져있는 파일을 모두 포함하여 반환하며, 하위경로를 포함한 모든 파일을 출력할 수도 있습니다.

두번째 인수인 [경로출력여부]를 True로 사용하면 폴더경로를 포함합니다. [경로출력여부]의 기본값은 False 이며, 기본값으로 사용할 경우 폴더경로 없이 파일명만 반환합니다.

오빠두Tip : 파일명 뒤에 확장자를 따로 분리해야 할 경우, SplitFileExt 함수를 사용해보세요.

세번째 인수인 [하위폴더포함]과 [최대깊이] 인수를 사용해 하위경로의 모든 파일목록을 출력할 수 있습니다. 최대깊이의 기본값은 2단계이며, 만약 C:\ 폴더의 파일목록을 조회할 경우 C:\폴더1\폴더2 단계까지 내려가서 조회합니다.

  • Array = ListFiles("C:\", False)
    '// 폴더경로를 포함하지 않은 파일목록을 반환합니다. (예: pagefile.sys, ... 등)
  • Array = ListFiles("C:\", True) '
    // 폴더경로를 포함한 파일목록을 반환합니다. (예: C:\pagefiles.sys, ... 등)
  • Array = ListFiles("C:\", , True, 2)
    // C:\에서 2단계 내려간 하위 폴더의 모든 파일목록을 반환합니다.
오빠두Tip : 특정 폴더 내 파일을 정확히일치 또는 유사일치로 검색해야 할 경우 vbFileSearch 함수를 사용하면 편리합니다.
폴더 내 파일목록 출력 listfiles 함수
ListFiles 함수로 폴더 내 파일 목록을 출력할 수 있습니다.
패치 내역
  • 2022.06.03
    - 하위폴더를 포함하여 조회할 수 있도록 명령문 업데이트

예제파일 다운로드

오빠두엑셀의 강의 예제파일은 여러분을 위해 자유롭게 제공하고 있습니다.


ListFiles 명령문 전체 코드
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ ListFiles 함수
'▶ 선택한 폴더의 파일목록을 배열로 반환합니다.
'▶ 인수 설명
'_____________sPath         : 파일목록을 출력할 폴더입니다.
'_____________withPath      : TRUE일 경우 폴더 경로를 함께 표시합니다. 기본값은 FALSE 입니다.
'_____________includeChild  : TRUE일 경우 하위 폴더의 파일도 모두 포함하여 출력합니다. 기본값은 FALSE 입니다.
'_____________MaxDepth      : 하위경로 포함 시, 내려가는 최대 단계입니다. 기본값은 2 단계 입니다.
'###############################################################
 
Function ListFiles(sPath As String, Optional withPath As Boolean = False, Optional includeChild As Boolean = False, Optional maxDepth As Long = 2)
 
' 변수를 선언합니다.
Dim dictFiles As Object
Dim arr As Variant
Dim i As Long: Dim x As Long
Set dictFiles = CreateObject("Scripting.Dictionary")
 
' 폴더 내 파일 경로를 Dictionary 에 추가합니다.
ListFiles_Routine dictFiles, sPath, True, includeChild, , maxDepth
 
' Dictionary가 비어있을 경우 #NULL 오류를 반환하고 그렇지 않을 경우 다음 단계로 넘어갑니다.
On Error GoTo EH:
ReDim arr(1 To dictFiles.Count)
 
' Dictionary를 배열로 변환합니다.
arr = dictFiles.items
 
' withPath가 False일 경우 폴더 경로를 제거합니다.
If withPath = False Then
For x = LBound(arr) To UBound(arr)
i = InStrRev(arr(x), "\")
arr(x) = Mid(arr(x), i + 1, Len(arr(x)))
Next
End If
 
' 파일 경로를 반환 후 함수를 종료합니다.
ListFiles = arr
 
Exit Function
 
EH:
ListFiles = "#NULL!"
 
End Function
Sub ListFiles_Routine(dict As Object, sPath As String, Optional withPath As Boolean = False, Optional includeChild As Boolean = True, Optional depth As Long = 0, Optional maxDepth As Long = 2)
 
Dim oFSO As Object: Dim oFolder As Object: Dim oFiles As Object: Dim oFile As Object
Dim oSubFolder As Object
 
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(sPath)
Set oFiles = oFolder.Files
 
On Error Resume Next
 
If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
 
For Each oFile In oFiles
If withPath = False Then dict.Add oFile.Name, oFile.Name Else: dict.Add sPath & oFile.Name, sPath & oFile.Name
Next
 
If includeChild = True Then
For Each oSubFolder In oFolder.SubFolders
depth = depth + 1
If depth <= maxDepth Then ListFiles_Routine dict, sPath & oSubFolder.Name, True, True, depth, maxDepth
depth = depth - 1
Next
End If
 
End Sub
인수설명

ListFiles 명령문에는 총 2개의 인수가 들어갑니다.

인수 설명
sPath
[String]
파일목록을 검색할 폴더 경로입니다.
withPath
[Boolean, 선택인수]
True일 경우 출력값에 폴더경로를 포함합니다. 기본값은 FALSE 입니다.
includeChild
[Boolean, 선택인수]
하위폴더 포함 여부입니다. 기본값은 FALSE 입니다. TRUE 일 경우 하위폴더를 포함한 파일 목록을 반환합니다.
MaxDepth
[Long, 선택인수]
최대깊이입니다. 기본값은 2이며, 기본 폴더 경로에서 하위 2단계까지 내려가 폴더를 조회합니다.
명령문 동작원리

본 명령문은 FileSystemObject 라이브러리를 활용합니다. FileSystemObject 라이브러리에 대한 자세한 설명은 MS홈페이지 관련링크를 참고하세요.

  1. FileSystemObject 라이브러리에서 각 폴더와 파일 개체를 받아옵니다.
    Dim oFSO As Object: Dim oFolder As Object: Dim oFiles As Object: Dim oFile As Object
     
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oFolder = oFSO.GetFolder(sPath)
    Set oFiles = oFolder.Files
  2. 받아은 파일 개체의 개수가 '0'일 경우 명령문을 종료합니다.
    If oFiles.Count = 0 Then Exit Function
  3. 받아온 폴더 경로뒤에 "\" 표시가 없을 경우 오류를 반환할 수 있으므로, 오류 방지를 위해 폴더경로 뒤 "\" 를 추가합니다.
    If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
  4. 폴더에 파일이 한개라도 존재할경우, 배열을 생성한 뒤 각 파일경로를 배열에 추가합니다.
    '// 폴더에 파일이 한개라도 존재시 배열 생성합니다.
    ReDim arr(1 To oFiles.Count)
     
    '// 각 파일을 돌아가며 Arr 배열로 반환합니다.
    For Each oFile In oFiles
        If withPath = False Then arr(i) = oFile.Name Else: arr(i) = sPath & oFile.Name
        i = i + 1
    Next
댓글 11
5 (5개 평가)
한현수
한현수 2020.05.13 13:43
안녕하세요 오빠두 엑셀 항상 잘보고 있고 항상 좋은 정보 감사드립니다.
다름이 아니라 이 함수(?)를 이용해서 하나의 폴더가 아닌 여러 폴더의 하위 파일들의
정보도 불러올수 있을까요?
오빠두엑셀
오빠두엑셀 작성자 2020.05.14 18:06
안녕하세요?^^
하위폴더까지 불러오시려면, 위 함수의 oFolder 변수를 이용하시면 됩니다.
간략히 설명드리면,

Dim oFld as Object
For Each oFld in oFolder.SubFolders
Dim oFld_tmp as Object : Set oFld_tmp = oFSO.GetFolder(oFld.Path)
Set oFiles = oFld_tmp.Files
.....
Next


와 같이 작성하시면 됩니다.^^
답변이 도움이 되셨길 바랍니다.
서세종
서세종 2021.06.21 16:10
안녕하세요 항상 좋은 공부되게 알려주셔서 감사합니다.
다름이 아니라 저도 위와 같은 방법을 구현을 하려 답변 을 주신 것으로 변형하여 적용을 하려하니 계속 오류가 발생하여 진행이 되질 않네요. 혹시 DIM / SET 코드 전체를 보여주실 수 있나요? 감사합니다.
오빠두엑셀
오빠두엑셀 작성자 2021.06.21 17:25
안녕하세요.
전체 명령문은 포스트에 모두 적어드리고 있습니다 :)
한번 확인해보시겠어요?
감사합니다.
남윤창
남윤창 2020.10.16 17:02
안녕하세요.
혹시 해당 명령어 및 매크로가 맥 기반 작업에서는 실행 불가능한지 알고 싶습니다 ㅠ
항상 좋은 정보와 강의 감사드립니다!
오빠두엑셀
오빠두엑셀 작성자 2020.10.17 10:58
안녕하세요.
CreateObject("Scripting.FileSystemObject") 개체는 Windows 전용 라이브러리이므로
Mac에서는 사용하실 수 없습니다. :)
감사합니다.
임재영
임재영 2021.06.18 16:36
안녕하세요 유튜브 항상 잘 보고 있습니다
다름이 아니라 제가 이 함수를 이용하여 하위 폴더 정보를 불러오게 변경을 해보고 있는데 오류가 나서 계속 막히고 있네요. 바꿀 수 있는 것은 맞겠죠??
오빠두엑셀
오빠두엑셀 작성자 2021.06.22 02:03
안녕하세요.
네 하위폴더 변경도 가능합니다.
lotuspond
lotuspond 2022.05.23 16:54
안녕하세요.
엑셀을 배우려고 서치하다가 좋은 사이트를 알게 되어 좋아요.
이 게시글을 참고하여 목록을 만들려고 하는데
Thumbs.db 등이나 엑셀 임시저장 파일인 ~$이 붙은 파일까지 목록으로 출력이 됩니다. 이러한 파일들을 제외하는 수식이 있을까요?
오빠두엑셀
오빠두엑셀 작성자 2022.05.25 15:36
Instr 함수를 사용해, ~$ 가 붙은 파일은 목록에서 제외되도록 명령문을 수정해보세요.^^
강민준🤗
강민준🤗 2024.08.11 12:38
좋은 자료 감사합니다.🙇‍♂️