- 최초 작성일: 2000-09-07
- 최종 수정일: 2026-09-30
- 조회수: 10 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 파일 검색하기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
VBA 함수 중에 Dir 이라는 아주 재미있는 함수가 있습니다. 도움말을 인용하자면, "지정한 패턴이나 파일 속성, 또는 드라이브 볼륨 레이블과 일치하는 파일, 디렉토리, 폴더 이름을 나타 내는 String을 반환"한다고 되어 있군요.
먼 소린지 이해가 안 가시지요? ^^ 쉽게 말하자면 파일을 검색하는 기능을 수행하는 함수입니다. 아래의 버튼을 누르세요.
검색할 폴더를 입력하면 해당 폴더 내에 있는 모든 파일들의 크기, 작성일자 등에 대한 정보들이 시트에 주욱 리스팅이 되지요? 코드를 살펴보도록 하겠습니다.
파일 검색하기
핵심 요약: Dir 함수로 파일 검색
Dir(폴더)로 첫 번째 파일을 찾고 Dir()을 반복 호출하면 폴더 안의 모든 파일을 차례로 읽을 수 있습니다.
- 1단계: InputBox로 폴더를 입력받고 Trim과 \ 붙이기로 정리합니다.
- 2단계: Dir(폴더)로 첫 파일을, Dir()로 다음 파일들을 읽습니다.
- 3단계: FileLen과 FileDateTime으로 크기와 작성일자를 기록하고 정렬합니다.
Step 1: 파일 목록 만들기 코드
Sub ShowFileList()
Dim sht As Worksheet
Dim intRow As Integer
Dim strDir As String
Dim strFile As String
'//필요한 변수를 먼저 선언합니다.
Set sht = ActiveSheet
strDir = Trim(InputBox("검색할 폴더명을 입력하세요: ", "http://www.iexceller.com"))
intRow = 1
'//sht라는 변수에 ActiveSheet, 즉 현재 시트를 저장해 둡니다. 그리고 InputBox 함수를 사용해서
'//어떤 폴더를 출력할 지 사용자가 직접 입력을 하도록 합니다. 여기서 Trim() 함수를 사용해 준 것
'//은 무엇 때문일까요? 그렇습니다! 혹시 입력하는 사람이 좌우에 공백을 입력할 경우 에러를 방지
'//하기 위한 것입니다.
Worksheets.Add after:=Sheets("Preface")
If Right(strDir, 1) <> "\" Then strDir = strDir & "\"
'//Preface 시트 뒤에 새로운 워크시트를 한 장 삽입하고, InputBox를 통해 입력받은 strDir의 값의
'//마지막이 \로 끝나지 않았으면 \를 첨가합니다. Dir() 함수를 사용할 때 마지막 부분에 \이 없
'//으면 에러가 발생하므로 미리 이 경우에 대비를 하기 위한 것이지요.
strFile = Dir(strDir)
If strFile = "" Then
MsgBox "해당 폴더에 파일이 없습니다", , "http://www.iexceller.com"
Exit Sub
End If
'//strDir 폴더 내에 있는 첫번째 파일명을 strFile 변수에 저장합니다.
Cells(intRow, 1) = "파일명"
Cells(intRow, 2) = "크기"
Cells(intRow, 3) = "작성일자"
Range("a1:c1").Font.Name = "HY견고딕"
intRow = intRow + 1
Cells(intRow, 1) = strFile
Cells(intRow, 2) = FileLen(strDir & strFile)
Cells(intRow, 3) = FileDateTime(strDir & strFile)
Do While strFile <> ""
strFile = Dir()
'//이제 Do~Loop 순환문을 돌면서 파일들에 대한 정보들을 워크시트 내에 차례로 뿌려줍니다.
'//여기서 strFile=Dir() 이라고 해 주면 자동으로 다음에 위치한 항목, 즉 다음 파일을 차례로 읽어
'//들이게 됩니다.
If strFile <> "" Then
intRow = intRow + 1
Cells(intRow, 1) = strFile
Cells(intRow, 2) = FileLen(strDir & strFile)
Cells(intRow, 3) = FileDateTime(strDir & strFile)
End If
Loop
Range("a2").Select
Selection.Sort Key1:=Range("a2"), Header:=xlGuess, order1:=xlAscending
Columns("a:c").EntireColumn.AutoFit
'//시트 상의 내용들에 대해 Sorting을 한 다음, 열 폭을 맞추어 줍니다.
MsgBox "총 " & intRow - 1 & " 개의 파일이 발견되었습니다", , "http://www.iexceller.com"
End Sub
Dir 함수는 지금도 동작하며, 파일 목록이 필요할 때 자주 쓰입니다. 폴더 안의 파일 목록을 시트로 불러오는 작업은 최신 엑셀의 [데이터] > [데이터 가져오기] > [파일에서] > [폴더에서](Power Query)로도 코드 없이 처리할 수 있습니다. 또한 Dir은 하위 폴더까지 검색하지 못한다는 점에 유의하세요.
정리
이상의 방법이 Dir() 함수를 사용하는 일반적인 방법입니다. 즉 처음 Dir 함수를 사용할 때에는 Dir("c:\windows\")와 같은 형태로 해서 폴더를 지정해 주고 그 다음번에는 그냥 Dir() 이라고만 하게 되면 자동으로 다음 해당 파일을 읽어들이는 것이지요.
마무리
다음 시간에는 이 Dir() 함수를 이용한 아주 실용적인 예제 한 가지에 대해 설명을 드리도록 하겠습니다. 도움말에 있는 Dir() 함수의 활용예제에 대해 미리 한번씩 읽어두시기 바랍니다.
오늘은 여기까지…
정리 — Dir 함수 파일 검색 핵심
| 구분 | 사용한 코드 | 역할 |
|---|---|---|
| 폴더 입력 | Trim(InputBox(...)) | 앞뒤 공백 제거 |
| 경로 정리 | If Right(strDir, 1) <> "\" | 마지막에 \ 붙이기 |
| 첫 파일 | strFile = Dir(strDir) | 첫 번째 파일명 |
| 다음 파일 | strFile = Dir() | 자동으로 다음 파일 |
| 파일 정보 | FileLen / FileDateTime | 크기와 작성일자 |
자주 묻는 질문 (FAQ)
Q1. Dir 함수는 어떤 기능을 하나요?
지정한 패턴이나 속성에 맞는 파일, 폴더 이름을 문자열로 돌려주는 함수입니다.
Q2. Dir()에 인수를 주지 않으면 어떻게 되나요?
직전에 지정한 조건에 해당하는 다음 항목을 자동으로 돌려줍니다.
Q3. 폴더명 뒤에 \를 붙이는 이유는 무엇인가요?
Dir 함수에 폴더를 지정할 때 마지막에 \가 없으면 오류가 발생할 수 있기 때문입니다.
마치며
Dir 함수의 첫 호출과 이후 호출의 차이만 이해하면 파일 검색은 어렵지 않습니다.