• 최초 작성일: 2002-10-31
  • 최종 수정일: 2026-09-30
  • 조회수: 8 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 여러 엑셀 파일 하나로 통합하기 2 (폴더 생성)

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

Promise little, do much! 약속은 적게, 실행은 많이! 이것을 반대로 행하게 되면 잡음이 생기게 마련이겠지요.

적게 약속하고 많이 실천합시다. 더 늦기 전에...

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

여러 엑셀 파일 하나로 통합하기 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 문으로 삭제하고 '아니오'이면 종료합니다.

마치며

폴더와 파일의 존재 여부 확인은 파일을 다루는 매크로의 기본입니다. 업무에 필요한 확인 절차를 계속 보완해 나가시기 바랍니다.