728x90

목차

 

 

엑셀을 사용해서 파일정리를 하고는 합니다.

사실 인터넷을 검색하면 저보다 잘 만드는 분이 많고 배포한 것도 있으니 그 프로그램을 사용하면 대부분 해결됩니다.

대량의 파일을 취급하다 보면 나만의 상황을 만나기 쉽고, 그럴 때를 위해 사용하는 이름 불러오기를 소개합니다.

저는 특히 폴더 안의 폴더 안의 폴더의 파일도 뽑아야 하는 경우가 있어요.

 

 

< 예제 파일 >

 

파일 리스트 읽기.xlsm
0.02MB

 

 

예제 파일을 먼저드립니다.

경로명 옆에 폴더 이름을 적고 실행 버튼을 누르기만 하면 되기 때문에 사용은 쉬울 것 같습니다.

 

 

 

< VBA 소스 코드 >

 

VBA는 File과 Folder를 호출하면 거의 필요한 대부분의 정보를 Windows에서 받아옵니다.

그래서 코드의 구조는 간단합니다.

 

Sub All_File_List()

    ' 폴더 경로를 지정합니다.
    Dim folderPath As String
    Dim ws As Worksheet
    Dim nextRow As Long
        
    folderPath = ThisWorkbook.Sheets(1).Cells(2, 3).Value '① 경로명을 불러옵니다.
    Set ws = ThisWorkbook.Sheets(1) '② 데이터를 넣을 시트를 지정합니다.
    
    '③ 먼저 실행한 이름들을 다 지워줍니다 + 필요한 내용을 입력합니다.
    
    ThisWorkbook.Sheets(1).Range("C5", Range("E5").End(xlDown)).Select
    Selection.Clear
    
    ThisWorkbook.Sheets(1).Range("C5") = "경로명"
    ThisWorkbook.Sheets(1).Range("D5") = "파일이름"
    ThisWorkbook.Sheets(1).Range("E5") = "용량"
    
    nextRow = 1
    
    '④ 이름을 불러오는 함수를 호출합니다.
    Call ListFiles(folderPath, ws, nextRow)

End Sub

Sub ListFiles(folderPath As String, ws As Worksheet, ByRef nextRow As Long)

    Dim folder As Object
    Dim file As Object
    Dim FSO As Object
    
    '⑤ FSO에 파일 시스템 객체를 불러내고 변수명 Folder에 정보를 입력합니다.
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set folder = FSO.GetFolder(folderPath)

    '⑥ 폴더에 파일을 불러내서 한줄씩 씁니다.
    For Each file In folder.Files
        ws.Cells(nextRow + 5, 3).Value = file.ParentFolder.Path ' A열에 파일 경로
        ws.Cells(nextRow + 5, 4).Value = file.Name ' B열에 파일 이름
        ws.Cells(nextRow + 5, 5).Value = Format(file.Size / 1024, "#,##0") & " KB" ' C열에 파일 크기 (KB로 변환)
        nextRow = nextRow + 1
    Next file

    '⑦ 하위 폴더의 숫자만큼 다시 재귀적으로 호출합니다.
    Dim subfolder As Object
    For Each subfolder In folder.SubFolders
        Call ListFiles(subfolder.Path, ws, nextRow)
    Next subfolder

End Sub

 

실행 결과

 

경로명을 쓰는 C2 칸에 작성하면 그 경로 아래 모든 파일을 찾아서 리스트로 만들어 줍니다.

경로와 폴더 그리고 용량까지 만들어 봤습니다.

 

 

 

 

< 코드의 동작순서 >

 

VBA 메크로가 동작하는 순서는 아래와 같습니다.

 

① 경로명을 불러옵니다.

② 데이터를 넣을 시트를 지정합니다.

③ 먼저 실행한 이름들을 다 지워줍니다 + 필요한 내용을 입력합니다.

④ 이름을 불러오는 함수를 호출합니다. - ListFiles(경로명, 작업할 워크시트, 줄정보)

⑤ 변수명 "FSO"에 파일 시스템 객체를 불러내고 변수명 "Folder"에 정보를 입력합니다.

⑥ 폴더에 파일을 불러내서 한줄씩 씁니다.

⑦ 하위 폴더의 숫자만큼 다시 재귀적으로 호출합니다.

   여기가 오늘의 핵심 재귀 호출입니다.

   → 폴더 아래 있는 파일을 다 적고,

   → 서브 폴더를 찾습니다. 서브폴더가 있으면 서브폴더 이름으로 다시 함수를 호출합니다.

   → 더 서브 폴더가 없으면 다시 For문으로 돌아와서 끝났는지 확인합니다.

 

이런 식으로 하기 때문에 폴더명을 불러오는 순서는 아래와 같습니다.

 

아래로 내려가는 순서로 되어있습니다.

 

 

 

320x100

 

반응형

+ Recent posts