Workbook 개체

Dir 함수

노만e 2025. 3. 14. 04:32

엑셀 VBA에서 Dir 함수는 파일 또는 폴더의 존재 여부를 확인하거나, 특정 패턴의 파일을 검색하는 기능을 제공합니다.


1. 기본 문법

Dir[(pathname, [attributes])]
매개변수
설명
기본값
pathname
검색할 파일 또는 폴더의 경로
없음 (필수)
attributes
검색할 파일 속성 (vbNormal, vbDirectory 등)
vbNormal (일반 파일만 검색)

📌 Dir은 한 번 호출하면 첫 번째 파일을 반환하고, 이후 Dir()을 추가로 호출하면 다음 파일을 반환

📌 마지막 파일까지 검색한 후 Dir()을 호출하면 빈 문자열 ("") 반환


2. 특정 파일 존재 여부 확인

Sub 파일존재_확인()
Dim 파일경로 As String
파일경로 = "C:\Users\Public\test.xlsx"
If Dir(파일경로) <> "" Then
MsgBox "파일이 존재합니다!"
Else
MsgBox "파일이 없습니다!", vbExclamation
End If
End Sub

📌 파일 "C:\Users\Public\test.xlsx"가 존재하는지 확인 후 메시지 출력

📌 파일이 존재하면 파일명을 반환, 없으면 "" 반환


3. 특정 폴더 존재 여부 확인

Sub 폴더존재_확인()
Dim 폴더경로 As String
폴더경로 = "C:\Users\Public\TestFolder"
If Dir(폴더경로, vbDirectory) <> "" Then
MsgBox "폴더가 존재합니다!"
Else
MsgBox "폴더가 없습니다!", vbExclamation
End If
End Sub

📌 폴더 "C:\Users\Public\TestFolder"가 존재하는지 확인

📌 폴더 확인 시 vbDirectory 속성을 추가해야 폴더를 검색 가능


4. 특정 폴더에 있는 파일 검색

Sub 폴더내_파일검색()
Dim 파일명 As String
파일명 = Dir("C:\Users\Public\*.xlsx") ' 첫 번째 Excel 파일 찾기
Do While 파일명 <> ""
MsgBox "찾은 파일: " & 파일명
파일명 = Dir() ' 다음 파일 검색
Loop
End Sub

📌 C:\Users\Public\ 폴더에서 .xlsx 파일을 찾아 목록 출력

📌 첫 번째 호출에서 첫 번째 파일 반환, 이후 Dir() 반복 호출로 다음 파일 검색


5. 특정 폴더 내 모든 파일 목록 출력

Sub 폴더내_모든파일_출력()
Dim 파일명 As String
파일명 = Dir("C:\Users\Public\*.*") ' 모든 파일 찾기
Do While 파일명 <> ""
Debug.Print 파일명 ' 즉석 창에 출력
파일명 = Dir() ' 다음 파일 검색
Loop
End Sub

📌 특정 폴더 내 모든 파일을 즉석 창(Immediate Window, Ctrl + G)에 출력


6. 특정 폴더 내 특정 확장자 파일 개수 세기

Sub 파일개수_세기()
Dim 파일명 As String
Dim 개수 As Integer
개수 = 0
파일명 = Dir("C:\Users\Public\*.xlsx") ' .xlsx 파일 검색
Do While 파일명 <> ""
개수 = 개수 + 1
파일명 = Dir() ' 다음 파일 검색
Loop
MsgBox "총 " & 개수 & "개의 엑셀 파일이 있습니다."
End Sub

📌 특정 폴더 내 .xlsx 파일 개수를 세고 메시지 박스로 출력


7. 폴더 내 특정 확장자 파일만 삭제

Sub 특정파일_삭제()
Dim 파일명 As String
파일명 = Dir("C:\Users\Public\*.tmp") ' .tmp 파일 검색
Do While 파일명 <> ""
Kill "C:\Users\Public\" & 파일명 ' 파일 삭제
파일명 = Dir() ' 다음 파일 검색
Loop
MsgBox "모든 .tmp 파일이 삭제되었습니다."
End Sub

📌 폴더 내 .tmp 파일을 모두 삭제

📌 삭제 시 Kill 함수를 사용하며, 삭제된 파일은 복구 불가 주의


8. 하위 폴더 포함 모든 파일 검색 (재귀 호출)

Sub 모든파일_검색(폴더경로 As String)
Dim 파일명 As String
Dim 하위폴더 As String
Dim 폴더 As Object
Dim FSO As Object

' 파일 시스템 개체 생성
Set FSO = CreateObject("Scripting.FileSystemObject")
' 현재 폴더 내 파일 검색
파일명 = Dir(폴더경로 & "\*.*")
Do While 파일명 <> ""
Debug.Print 폴더경로 & "\" & 파일명 ' 즉석 창 출력
파일명 = Dir() ' 다음 파일 검색
Loop
' 하위 폴더 검색
하위폴더 = Dir(폴더경로 & "\*", vbDirectory)
Do While 하위폴더 <> ""
If (하위폴더 <> ".") And (하위폴더 <> "..") Then
If FSO.FolderExists(폴더경로 & "\" & 하위폴더) Then
모든파일_검색 폴더경로 & "\" & 하위폴더 ' 재귀 호출
End If
End If
하위폴더 = Dir()
Loop
End Sub
Sub 실행_모든파일검색()
모든파일_검색 "C:\Users\Public"
End Sub

📌 폴더 내 모든 파일과 하위 폴더까지 포함하여 검색 (재귀 호출 사용)


9. 특정 파일이 존재하면 열기

Sub 파일존재시_열기()
Dim 파일경로 As String
파일경로 = "C:\Users\Public\데이터.xlsx"
If Dir(파일경로) <> "" Then
Workbooks.Open 파일경로
Else
MsgBox "파일이 존재하지 않습니다.", vbExclamation
End If
End Sub

📌 특정 파일이 존재하면 엑셀에서 열기


10. 특정 폴더가 없으면 생성하기

Sub 폴더_없으면_생성()
Dim 폴더경로 As String
폴더경로 = "C:\Users\Public\NewFolder"
If Dir(폴더경로, vbDirectory) = "" Then
MkDir 폴더경로
MsgBox "새 폴더가 생성되었습니다: " & 폴더경로
Else
MsgBox "폴더가 이미 존재합니다.", vbInformation
End If
End Sub

📌 폴더가 없으면 MkDir로 생성, 있으면 메시지 표시


📝 정리

기능
VBA 코드
파일 존재 여부 확인
If Dir("파일경로") <> "" Then
폴더 존재 여부 확인
If Dir("폴더경로", vbDirectory) <> "" Then
특정 확장자 파일 검색
Dir("C:\경로\*.xlsx")
폴더 내 모든 파일 검색
Do While Dir() <> "": Debug.Print Dir(): Loop
파일 개수 세기
Do While Dir() <> "": 개수 = 개수 + 1: Loop
특정 확장자 파일 삭제
Kill "C:\경로\*.tmp"
폴더 내 모든 파일 검색 (재귀 호출)
모든파일_검색("C:\경로")
파일이 존재하면 열기
If Dir("파일경로") <> "" Then Workbooks.Open "파일경로"
폴더가 없으면 생성
If Dir("폴더경로", vbDirectory) = "" Then MkDir "폴더경로"

🔥 VBA의 Dir 함수를 활용하면 파일 및 폴더를 쉽게 검색하고 관리할 수 있습니다! 🚀