- 최초 작성일: 2002-10-31
- 최종 수정일: 2026-09-30
- 조회수: 8 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 여러 엑셀 파일 하나로 통합하기 2 (폴더 생성)
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
Promise little, do much! 약속은 적게, 실행은 많이! 이것을 반대로 행하게 되면 잡음이 생기게 마련이겠지요.
적게 약속하고 많이 실천합시다. 더 늦기 전에...
여러 엑셀 파일 하나로 통합하기 2 (폴더 생성)
핵심 요약: 폴더 자동 생성과 파일 통합
통합 결과를 저장할 폴더가 없으면 만들고, 같은 이름의 파일이 있으면 삭제할지 물어본 뒤 통합한 결과를 새 통합 문서로 저장합니다.
- 1단계: PathExist 함수로 Temp 폴더 유무를 확인하고 없으면 MkDir로 만듭니다.
- 2단계: FileExist 함수로 같은 이름의 파일을 확인하고 삭제 여부를 묻습니다.
- 3단계: 선택한 파일들을 새 통합 문서에 붙여 넣고 저장합니다.
Step 1: 무엇이 달라졌을까요?
지난 강좌 시간에 사용자가 지정한 파일을 모두 하나로 통합하는 방법에 대해 살펴 보았습니다. 이번 시간에는 여기서 조금더 발전을 시켜보도록 하겠습니다.
지난 강좌에서는 사용자가 수작업으로 폴더를 미리 만들어야 했습니다. 이번에는 버튼을 클릭하면 현재 파일이 있는 폴더 밑에 Temp라는 폴더가 이미 있는지 확인하고 없으면 폴더를 생성합니다. 또한 Temp 폴더 안에 Consolidation.xls 파일이 이미 있을 경우 새로 만들 것인지를 사용자가 판단하도록 하는 과정을 추가합니다.
버튼을 누른 다음 통합할 파일들을 선택하면 통합 결과가 Temp 폴더의 Consolidation.xls로 저장됩니다. Consolidation.xls가 이미 있는 상태에서 다시 실행하면 아래와 같은 MsgBox가 나타납니다.
'예' 버튼을 클릭하면 Temp 폴더 안의 Consolidation.xls 파일을 삭제하고 새로 만들며, '아니오' 버튼을 선택하면 프로시저를 종료합니다.
Step 2: 통합 프로시저
Sub ConsolWorkbook()
Dim varFileName As Variant
Dim varTemp As Variant
Dim wrkBook As Workbook
Dim wrkNewBook As Workbook
Dim i As Integer
Dim rngTarget As Range
Dim strFile As String
Dim strPath As String
Dim strFullName As String
Dim Msg As String
Application.ScreenUpdating = False
strFile = "Consolidation"
strPath = ThisWorkbook.Path & "\Temp\"
strFullName = strPath & strFile & ".xls"
' 다른 부분은 지난 강좌와 흡사하고 아래 부분이 새로 추가되었습니다.
' 즉, PathExist 라는 사용자 정의 함수를 수행하여 그 리턴값이 True 인 경우에는 ChDir 문을
' 사용하여 해당 폴더로 이동합니다. 만약 리턴값이 False 라면 MkDir 문을 사용하여 폴더를
' 새로 만들어 줍니다.
If PathExist(strPath) = True Then
ChDir ThisWorkbook.Path & "\Temp\"
Else
MkDir strPath
End If
' 아래 부분도 새로 추가된 부분입니다.
' Temp 폴더 내에 Consolidation.xls 라는 파일이 있나 없나를 검사하여 없으면 새로 만들고
' 있으면 새로 만들 것안지 여부를 사용자가 선택하도록 합니다.
If FileExist(strFullName) = True Then
If MsgBox("같은 이름의 파일이 이미 존재합니다. 지우고 다시 만들까요?", vbYesNo, "www.iExceller.com") = vbYes Then
Kill strFullName
Else
MsgBox "프로그램을 종료합니다", , "www.iExceller.com"
Application.ScreenUpdating = True
GoTo ET
End If
End If
' 아래 부분은 지난 강좌에서 설명드린 내용이므로 해설은 건너 뛰고...
varFileName = Application.GetOpenFilename(filefilter:="Excel Files(*.xls),*.xls", Title:="통합할 파일들을 선택하세요", MultiSelect:=True)
If TypeName(varFileName) = "Boolean" Then
Application.ScreenUpdating = True
Exit Sub
End If
Set wrkNewBook = Workbooks.Add
For Each varTemp In varFileName
Set wrkBook = Workbooks.Open(varTemp)
Set rngTarget = wrkNewBook.Sheets(1).Cells(65536, 1).End(xlUp).Offset(1, 0)
wrkBook.Worksheets(1).UsedRange.Copy rngTarget
Application.CutCopyMode = False
wrkBook.Close savechanges:=False
i = i + 1
Next varTemp
If i = 0 Then
MsgBox "오류가 발생하였습니다"
Application.ScreenUpdating = True
GoTo ET
End If
wrkNewBook.SaveAs Filename:=strFullName
wrkNewBook.Close
Application.ScreenUpdating = True
Msg = Msg & "파일 통합 작업을 완료하였습니다" & vbCr
Msg = Msg & strPath & " 폴더에 " & strFile & ".xls" & " 파일이 생성되었습니다"
MsgBox Msg, , "www.iExceller.com"
ET:
End Sub
PathExist라는 사용자 정의 함수의 결과가 True이면 ChDir 문으로 해당 폴더로 이동하고, False이면 MkDir 문으로 폴더를 새로 만듭니다. 그리고 Temp 폴더 안에 Consolidation.xls가 있는지를 FileExist 함수로 확인해 사용자가 다시 만들지를 선택하도록 했습니다. 나머지는 지난 강좌와 같습니다.
Step 3: 폴더와 파일의 존재 여부를 확인하는 사용자 정의 함수
이번에는폴더가 있나 없나를 확인하는 사용자 정의 함수를 살펴보지요. 보시는 것처럼 아주 간단합니다.
Function PathExist(strPath) As Boolean
' 해당 폴더가 있을 경우 True 값을 돌려줍니다.
PathExist = (Dir(strPath, vbDirectory) <> "")
' 원래 위 문장은
' If Dir(strPath, vbDirectory) <> "" Then
' PathExist = True
' Else
' PathExist = False
' End If
' 이렇게 표현할 것을 한 줄로 축약한 형태입니다.
End Function
다음에는... 폴더 내에 특정 파일이 있는지를 검사하는 부분입니다.
Function FileExist(strFile) As Boolean
' 해당 파일이 있을 경우 True 값을 돌려줍니다.
Dim strTemp As String
strTemp = Dir(strFile)
FileExist = IIf(strTemp <> "", True, False)
End Function
이것 이외에도 여러분의 업무에서 필요한 부분은 계속 추가 / 보완해 나가도록 하세요.
다음 시간에 또...
정리 — 폴더·파일 확인 핵심 코드
| 구분 | 사용한 코드 | 역할 |
|---|---|---|
| 폴더 확인 | Dir(strPath, vbDirectory) <> "" | 폴더 존재 여부 |
| 폴더 생성 | MkDir strPath | Temp 폴더 만들기 |
| 파일 확인 | Dir(strFile) <> "" | 파일 존재 여부 |
| 파일 삭제 | Kill strFullName | 기존 파일 제거 |
| 저장 | wrkNewBook.SaveAs Filename:=strFullName | 통합 결과 저장 |
자주 묻는 질문 (FAQ)
Q1. 폴더가 있는지는 어떻게 확인하나요?
Dir 함수에 vbDirectory 속성을 지정해 결과가 빈 문자열이 아니면 폴더가 존재하는 것입니다. 이를 사용자 정의 함수로 만들어 두면 편리합니다.
Q2. 폴더를 새로 만들려면 어떻게 하나요?
MkDir 문에 폴더 경로를 지정합니다. 이미 있는 폴더에 사용하면 오류가 나므로 먼저 존재 여부를 확인합니다.
Q3. 같은 이름의 파일이 있으면 어떻게 하나요?
MsgBox로 사용자에게 삭제하고 다시 만들 것인지 물어본 뒤, '예'이면 Kill 문으로 삭제하고 '아니오'이면 종료합니다.
마치며
폴더와 파일의 존재 여부 확인은 파일을 다루는 매크로의 기본입니다. 업무에 필요한 확인 절차를 계속 보완해 나가시기 바랍니다.