• 최초 작성일: 2000-09-03
  • 최종 수정일: 2026-09-30
  • 조회수: 10 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 폴더 내의 모든 파일 한번에 출력하기

들어가기 전에

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

지난 시간에 이어지는 내용…

이제 Dir() 함수가 어떤 역할을 담당하는지 이제 이해하시겠지요? 그리고 도움말에 나와있는 Dir() 활용예제를 한번씩 살펴보셨는지 모르겠군요. 처음 도움말을 읽어보면 아마 무슨 소린지 잘 이해가 가지 않을 것입니다. "어떻게 하면 사람들이 알아보기 어렵게 쓸까?"를 연구 해서 만든 것 처럼 여겨지실지도 모르겠습니다. ^^

하지만 자꾸 접하다 보면 도움말처럼 좋은 참고서가 없다는 것을 느끼시게 될 것입니다. 그러니 익숙해 질 때까지 자꾸 들여다 보실 수 밖에 더좋은 방법이 없겠지요.

지난 시간에 예고해 드린대로 오늘은 이 Dir() 함수의 활용예제 한 가지를 소개해 드립니다. 눈치 빠른 분들은 강좌제목만 보고서도 어떤 내용인지 짐작하시는 분도 있을 것 같군요. 절에 가서도 새우젓을 얻어드실 분들… ^^

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

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

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


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

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

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

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

폴더 내의 모든 파일 한번에 출력하기

핵심 요약: 폴더 내 파일 일괄 출력

Dir 함수로 폴더의 엑셀 파일을 차례로 열어 모든 시트를 미리보기 또는 출력한 뒤 닫는 과정을 반복합니다.

  • 1단계: 폴더를 입력받고 Dir(폴더 & "*.xls")로 첫 파일을 찾습니다.
  • 2단계: Workbooks.Open으로 열고 모든 워크시트를 PrintPreview합니다.
  • 3단계: 워크북을 닫고 Dir()로 다음 파일을 찾아 반복합니다.

Step 1: 결과 미리 보기

아래의 버튼을 누른 다음 Excel 파일이 있는 아무 폴더나 입력해 보세요.

실제 작업을 하실 때에는 폴더를 하나 만든 다음 출력하고자 하는 (Excel)파일들을 이 폴더에 복사를 하 고 이 버튼을 클릭하면 폴더 내의 모든 Excel파일, 시트들이 순차적으로 출력됩니다.

옛날 이야기 하나

Exceller가 처음 회사에 들어왔을 때 사무실의 컴퓨팅 환경은 486SX급 PC에 Dot Matrix 프린터를 쓰고 인터넷은 14400BPS 모뎀을 통해 정말 참을 인자 수십 개씩 써가며 간혹 접속되는 말 그대로 아주 열악 한 그런 환경이었습니다. 그 당시에는 그런 것을 몰랐었지만…

컴퓨터는 그런 대로 1인 1PC 상태였으니(그나마 다른 부서보다 앞서서…) 괜찮았는데 프린터가 문제였 습니다. 보통 4~5인이 프린터를 공유해서 사용을 하다 보니 특히 더 그랬습니다. 많은 자료를 출력할 때 직접적으로 눈치를 주는 사람은 없었으나 "아직 많이 남았어?" 또는 "뭐 출력해?"하고 한 마디씩 하고 갈 때마다 적지 않게 부담이 되었습니다. 가장 여유있는 시간은 점심시간이나 남들이 다 퇴근한 저녁시간 이었지요.

그 때 오늘 설명드린 VBA를 알았더라면… 하긴 그 때는 VBA는 고사하고 Excel이 뭔지도 모를 때였었지요. 도스용 Lotus를 쓰던 시절이었으니까.

하여튼 그 때와 비교를 하면 지금은 엄청나게 좋아진 환경임에는 틀림없습니다만 아직도 출력을 할 때, 눈치를 보는 분이 혹시 있으신지 모르겠군요. 또는 굳이 그것 때문이 아니라 그냥 허비하기 쉬운 점심식 사 시간에 시간이 많이 걸리는 프린팅 작업을 하고 점심시간이 끝나면 바로 출력물로 다른 분석작업 등 에 들어갈 수 있으니 훨씬 효율적인 업무진행이 되겠지요?

말이 많아졌군요. ^^ 코드를 살펴보도록 하지요.

Step 2: 코드 작성하기

Sub PrintAllFiles()
    Dim sht As Worksheet
    Dim strDir As String
    Dim strFile As String
    strDir = Trim(InputBox("출력 폴더를 입력하세요: ", "http://www.iexceller.com"))
    '//변수를 선언한 다음 출력 대상 폴더를 사용자로부터 입력받는 과정입니다.
    '//다른 것은 아실테고… InputBox를 통해 폴더명에 입력받을 때 Trim() 함수를 함께 사용했군요.
    '//왜 그랬을까요? 사용자가 입력하면서 혹시 문자열 앞뒤에 공백을 집어넣을 경우 에러처리를 해
    '//주기 위함입니다.

    If Right(strDir, 1) <> "\" Then strDir = strDir & "\"
    strFile = Dir(strDir & "*.xls")
    '//이 부분은 지난 시간에도 설명을 드린 것 같은데, Dir() 함수를 써서 폴더를 검색할 때 폴더명 뒤에
    '//반드시 \표시를 붙여주어야 합니다. 그런데 대개의 사용자들은 이것을 입력하지 않을 것입니다.
    '//이런 경우 에러가 발생하게 되므로 사용자가 입력한 문자열의 마지막 1문자를 검색해서 \로 끝나
    '//지 않았으면 \를 추가해 줍니다.

    '//그런 다음에 strFile이라는 변수에는 디렉토리명과 그 디렉토리에 있는 첫번째 Excel 파일명을 담
    '//아 둡니다.

    If strFile = "" Then
        MsgBox "아무 Excel 파일도 없습니다", , "http://www.iexceller.com"
        Exit Sub
        '//폴더 내에 Excel 파일이 하나도 없으면 에러 메시지를 뿌려주고 프로시저를 종료합니다.
    End If

    Do
    '//이제 Do~Loop 순환문을 돌면서 폴더 내의 모든 Excel 파일들을 검색합니다.

        Workbooks.Open strDir & strFile
        For Each sht In Worksheets
            sht.PrintPreview
            '//오픈된 Excel 파일의 모든 워크시트를 미리보기(PrintPreview) 합니다. 만약에 미리보기가
            '//아니라 바로 프린터로 출력을 하고자 한다면 PrintPreview를 PrintOut으로 고쳐주시면 되겠
            '//지요?

        Next sht

        ActiveWorkbook.Close
        strFile = Dir()
        '//모든 워크시트에 대한 출력작업이 끝났으면 Close 메서드를 통해 활성화된 워크북을 닫습니다.
        '//그 다음에 strFile=Dir()이라고 한 것은 어떤 기능을 수행하지요? 그렇습니다. 지난 시간에 설명
        '//을 드린대로 좀전에 출력했던 그 다음의 파일을 자동으로 저장하게 됩니다.

    Loop Until strFile = ""
    '//strFile변수의 값이 공백이 될 때까지, 그러니까 해당 폴더내에 ".xls"파일이 없을 때까지 계속 루핑
    '//을 하게 되겠군요.
End Sub

이 코드는 *.xls 파일만 검색합니다. 최신 버전의 엑셀에서 .xlsx, .xlsm 파일까지 대상으로 하려면 Dir(strDir & "*.xls*")로 바꾸면 됩니다. 또한 대량의 출력물은 PrintPreview 대신 PrintOut을 사용하며, 출력 전에 프린터와 용지 설정을 확인하는 것이 좋습니다.

마무리

코드는 몇 줄 안되지만 거기에 비하면 아주 강력한(?) 기능이지요?

다음 시간에 또…

정리 — 일괄 출력 핵심

구분 사용한 코드 역할
파일 검색 Dir(strDir & "*.xls") 엑셀 파일만 검색
파일 열기 Workbooks.Open strDir & strFile 통합 문서 열기
시트 순환 For Each sht In Worksheets 모든 시트 대상
출력 sht.PrintPreview / PrintOut 미리보기 또는 출력
반복 종료 Loop Until strFile = "" 파일이 없을 때까지

자주 묻는 질문 (FAQ)

Q1. 미리보기 대신 바로 출력하려면 어떻게 하나요?

코드의 PrintPreview를 PrintOut으로 바꾸면 됩니다.

Q2. 폴더에 엑셀 파일이 없으면 어떻게 되나요?

Dir 결과가 빈 문자열이므로 메시지를 표시하고 프로시저를 종료하도록 처리합니다.

Q3. Dir()을 한 번 더 호출하는 이유는 무엇인가요?

같은 조건에 해당하는 다음 파일을 자동으로 가져오기 위해서입니다.

마치며

몇 줄의 코드로 점심시간 동안 폴더 안의 모든 파일을 출력해 두는 강력한 자동화를 만들 수 있습니다.