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

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

홈페이지 » 폴더 내 파일 목록 출력 :: 엑셀 ListFiles 함수 사용법

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

구문

ListFiles ( 폴더경로, [경로출력여부] )

설명

엑셀 ListFiles 함수는 지정한 폴더 경로안에 파일 목록을 배열로 반환하는 함수입니다. 폴더 내 숨겨져있는 파일을 모두 포함하여 반환합니다.

두번째 인수인 [경로출력여부]를 True로 할 경우 폴더경로를 포함한 값을 배열로 반환합니다. [경로출력여부]의 기본값은 False 이며, 폴더경로 없이 파일명만 반환합니다. 만약 파일명 뒤에 확장자를 분리해야 할 경우, SplitFileExt 함수를 사용하세요.

특정 폴더 내 파일을 정확히일치 또는 유사일치로 검색해야 할 경우 vbFileSearch 함수를 사용하면 더욱 편리합니다.

  • Array = ListFiles("C:\", False)
    '// 폴더경로를 포함하지 않은 파일목록을 반환합니다. (예: pagefile.sys, ... 등)
  • Array = ListFiles("C:\", True) '
    // 폴더경로를 포함한 파일목록을 반환합니다. (예: C:\pagefiles.sys, ... 등)
폴더 내 파일목록 출력 listfiles 함수
ListFiles 함수로 폴더 내 파일 목록을 출력할 수 있습니다.
예제파일 다운로드
ListFiles 명령문 전체 코드
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ ListFiles 함수
'▶ 선택한 폴더의 파일목록을 배열로 반환합니다.
'▶ 인수 설명
'_____________sPath     : 파일목록을 출력할 폴더입니다.
'_____________withPath  : 폴더경로를 같이 출력할 여부를 결정합니다.
'###############################################################
 
Function ListFiles(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 oFiles As Object: Dim oFile As Object
 
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(sPath)
Set oFiles = oFolder.Files
 
'// 변수를 설정합니다.
i = 1
If oFiles.Count = 0 Then Exit Function
If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
 
'// 폴더에 파일이 한개라도 존재시 배열 생성합니다.
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
 
'// 배열을 결과값으로 출력합니다.
ListFiles = arr
 
End Function

ListFiles 명령문 상세설명

사용예제
Sub Test()
 
Dim sPath As String
Dim vaArray As Variant: Dim var As Variant
Dim i As Long: i = 6
 
sPath = Sheet1.Range("B3").Value
 
Sheet1.Range("B6:B10000").ClearContents
 
vaArray = ListFiles(sPath)
 
For Each var In vaArray
        Sheet1.Range("B" & i).Value = var
        i = i + 1
Next
 
End Sub
인수설명

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

인수데이터형식설명기본값
sPathString파일목록을 검색할 폴더 경로입니다.
withPathBoolean[선택인수] True일 경우 출력값에 폴더경로를 포함합니다.False
명령문 동작원리

본 명령문은 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
5 1 vote
게시글평점
현재 페이지 댓글알림 신청
알림 설정
guest
2 Comments
Inline Feedbacks
View all comments
한현수
한현수
2020년 5월 13일 1:43 오후
게시글평점 :
     

안녕하세요 오빠두 엑셀 항상 잘보고 있고 항상 좋은 정보 감사드립니다.
다름이 아니라 이 함수(?)를 이용해서 하나의 폴더가 아닌 여러 폴더의 하위 파일들의
정보도 불러올수 있을까요?

2
0
여러분의 생각을 댓글로 남겨주세요.x