• 최초 작성일: 2025-01-25
  • 최종 수정일: 2026-09-27
  • 조회수: 48 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: VBA 파워 코딩 256회 - 선택 페이지 인쇄

들어가기 전에

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

워드는 쉼표(,)나 대시(-)를 이용하여 특정한 페이지 범위를 지정 인쇄할 수 있습니다.
예를 들어 1, 3, 5 ~ 7 페이지를 인쇄하려면 그림과 같이 하면 됩니다.

MS Word의 '인쇄' 메뉴
Word 인쇄 메뉴에서 페이지에 1,3,5-7을 입력한 모습
아이엑셀러

하지만 엑셀은 페이지 개념이 희박하기에 떨어져 있는 페이지를 한번에 인쇄할 수 있는 방법이 없습니다.
만약 1, 3, 5, 7-8 페이지를 인쇄하려면 [파일] - [인쇄] 메뉴를 이용하여 네 번을 반복해서 지정해 주어야 합니다.

엑셀 인쇄 화면에서 페이지 범위를 한 번에 하나씩만 지정할 수 있는 모습
아이엑셀러
권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

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

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


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

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

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

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

떨어져 있는 페이지 한번에 인쇄하는 Code

핵심 요약: 떨어져 있는 페이지를 VBA로 한 번에 인쇄하기

엑셀의 [인쇄] 메뉴는 한 번에 하나의 페이지 범위만 지정할 수 있지만, VBA에서 입력받은 페이지를 쉼표 단위로 나눠 PrintOut을 반복하면 1, 3, 5-8처럼 떨어져 있는 페이지도 한꺼번에 인쇄할 수 있습니다.

  • 입력 형식: 쉼표(,)로 구분, 연속 범위는 대시(-) 사용 (예: 1,3,5-8)
  • 핵심 함수: InputBox, Split, InStr, Left, Mid, CInt
  • 인쇄 명령: ActiveSheet.PrintOut From:=시작, To:=끝
  • 오류 처리: On Error GoTo ET로 잘못된 입력 시 안내 메시지 표시

VBA로 떨어져 있는 페이지 인쇄하기

엑셀에서 떨어져 있는 페이지를 한꺼번에 인쇄할 수 있는 방법은 없을까요? 있으니까 Exceller가 이렇게 강좌를 진행하는 거겠지요?(^^;)
VBA로 코딩을 하면 가능합니다.

예제 파일에서 "선택 페이지 인쇄" 버튼을 클릭하고 아래와 같이 입력해 보세요. 1, 3, 4페이지와 8-10 페이지가 한번에 인쇄됩니다.

선택 페이지 인쇄 버튼을 클릭하면 나타나는 InputBox에 1,3,4,8-10을 입력한 모습
아이엑셀러

[선택 페이지 인쇄] 버튼에 연결된 코드

[선택 페이지 인쇄] 버튼에 연결된 코드를 살펴보죠.

Sub PrintSelectPages()
    Dim iTotalPage As Integer   ' 총 페이지 수
    Dim iFrom As Integer        ' 인쇄를 시작할 페이지
    Dim iTo As Integer          ' 인쇄를 종료할 페이지
    Dim i As Integer            ' For ~ Next 문에서 사용할 Flag 변수
    Dim sNum As String          ' InputBox에 입력받을 페이지
    Dim sPage() As String       ' 입력받은 문자열을 배열로 분리
    Dim sMsg As String
    On Error GoTo ET

    sMsg = "페이지 번호를 쉼표(,)나 -로 구분하여 입력하세요." & vbCr
    sMsg = sMsg & "(예: 1,3,5-8)"

    iTotalPage = ActiveSheet.PageSetup.Pages.Count    ' 워크시트의 총 페이지 수 파악
    sNum = InputBox(sMsg, "인쇄할 페이지 입력")          ' 인쇄할 페이지 입력받음
    sPage() = Split(sNum, ",")
    ' 콤마로 구분된 문자열을 Split 함수를 이용해 분리한 후, 배열 변수의 각 배열에 저장

    ' 배열 변수 sPage의 최소 ~ 최대 범위까지 순환
    For i = LBound(sPage) To UBound(sPage)

        ' sPage(i) 변수에 대시(-)가 있으면 - 위치를 기준으로 앞 부분은 발췌해서 iFrom, 뒷 부분은 iTo 변수에 저장
        If InStr(1, sPage(i), "-") > 0 Then
            iFrom = CInt(Left(sPage(i), InStr(1, sPage(i), "-") - 1))
            iTo = CInt(Mid(sPage(i), InStr(1, sPage(i), "-") + 1))
            ActiveSheet.PrintOut From:=iFrom, To:=iTo    ' 해당 페이지 인쇄
        Else
            ' 만약 전체 페이지 수보다 큰 값이 입력된 경우, 인쇄하지 않고 건너뜀
            If iTotalPage >= CInt(sPage(i)) Then
                ActiveSheet.PrintOut From:=sPage(i), To:=sPage(i)
            End If
        End If
    Next i

ET:                            ' 오류 발생 시 실행할 레이블
    If Err.Number <> 0 Then    ' 오류가 발생하였을 경우...
        sMsg = "인쇄할 페이지 번호를 다시 확인하세요"
        MsgBox sMsg, Title:=Err.Number & ": " & Err.Description
    End If
End Sub

참고: 원문 코드 수정

원문 코드의 주석에는 "전체 페이지 수보다 큰 값이 입력된 경우 전체 페이지 값으로 대체"라고 되어 있었지만, 실제 코드는 값을 대체하지 않고 If iTotalPage >= CInt(sPage(i)) Then 조건에 맞지 않으면 인쇄를 건너뜁니다. 실제 동작에 맞게 주석을 "인쇄하지 않고 건너뜀"으로 바꾸었습니다. 코드 자체는 그대로입니다.

아주 오래 전 강좌에서 홀수/짝수 페이지 인쇄하기, 역순으로 인쇄하기 등에 대해서도 소개한 기억이 납니다. 필요한 분들은 찾아보시기 바랍니다. 혹시 못 찾겠으면 알려주세요.

참고: 이미지에 대하여

이 글은 원래 네이버 포스트에 게재되었던 글로, 네이버 포스트 서비스 종료로 네이버 블로그로 옮기는 과정에서 원본 이미지가 소실되었습니다. 위 이미지는 본문 설명을 바탕으로 당시 화면 구성을 재구성한 예시 이미지이며, 실제 엑셀 화면과 세부 디자인(버전별 UI)은 다를 수 있습니다.

정리 — 떨어져 있는 페이지 한 번에 인쇄하기

단계 코드에서 하는 일
입력 InputBox로 인쇄할 페이지(예: 1,3,5-8) 입력받음
분리 Split 함수로 쉼표(,) 단위로 나누어 배열에 저장
판별 InStr 함수로 대시(-) 유무 확인 - 있으면 범위, 없으면 단일 페이지
인쇄 PrintOut 메서드의 From, To 인수로 해당 페이지 인쇄
오류 처리 On Error GoTo ET로 잘못된 입력 시 안내 메시지 표시

자주 묻는 질문 (FAQ)

Q1. 엑셀에서 떨어져 있는 페이지를 한 번에 인쇄할 수 있나요?

[파일] - [인쇄] 메뉴에서는 한 번에 하나의 페이지 범위만 지정할 수 있어서 기본 기능으로는 불가능합니다. VBA로 입력받은 페이지를 쉼표 단위로 나눠 PrintOut을 반복하면 가능합니다.

Q2. 인쇄할 페이지는 어떤 형식으로 입력하나요?

페이지 번호를 쉼표(,)로 구분하고, 연속된 범위는 대시(-)로 표시합니다. 예를 들어 1,3,5-8처럼 입력하면 1, 3, 5~8 페이지가 인쇄됩니다.

Q3. 잘못된 값을 입력하면 어떻게 되나요?

형식에 맞지 않는 값을 입력하면 오류 처리 구문이 실행되어 '인쇄할 페이지 번호를 다시 확인하세요' 메시지가 표시됩니다. 또한 단일 페이지 번호가 총 페이지 수보다 크면 인쇄하지 않고 건너뜁니다.

마치며

엑셀에는 없는 '떨어져 있는 페이지 한 번에 인쇄'도 VBA 코드 하나면 뚝딱 해결됩니다. 예제 파일로 직접 실행해 보세요!
VBA에 대한 기초 지식을 공부하실 분은 아이엑셀러 닷컴 사이트 정문 왼쪽에 있는 'VBA 강좌 - VBA 입문강좌'를 읽어보시면 이해가 빠릅니다.