• 최초 작성일: 2000-06-27
  • 최종 수정일: 2026-09-30
  • 조회수: 10 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 화면크기 조절하기 & 시트 스크롤링

들어가기 전에

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

화면의 크기를 조절하고자 할 때, 아마 대부분의 사용자들은 "보기-확대/축소" 메뉴를 선택한 다음, "배율-사용자 정의" 란으로 가서 원하는 배율을 입력할 것입니다. 여러 단계를 거쳐야 하니까 좀 불편하지요? 이것을 좀더 편리한 형태로 만들 수 없을까요?

Necessity is the mother of convention! 이라고, 불편한 점을 느껴야 이것을 개선할 생각을 하게 되는 것이지요.

[Today's Sample]에서 살펴보신 바와 같이, 이번 강좌에서는 유저폼의 컨트롤을 통해 화면의 배율을 조정하는 방법과 시트를 상하좌우로 스크롤링 하는 방법, 이 두 가지에 대해 알아보도록 하겠습니다. 함수를 배울 때에도 그랬지만 어떤 일이든지 기초만 잘 익혀두면 그 다음은 응용의 문제입니다.

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

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

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


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

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

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

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

화면크기 조절하기 & 시트 스크롤링

핵심 요약: 스크롤바로 화면 제어하기

스크롤바의 Value를 ActiveWindow의 Zoom, ScrollColumn, ScrollRow에 대입하면 배율과 스크롤을 제어할 수 있습니다.

  • 1단계: Initialize에서 스크롤바의 Min, Max, Value를 지정합니다.
  • 2단계: Change 이벤트에서 Value를 ActiveWindow 속성에 대입합니다.
  • 3단계: 변하지 않는 문자열은 Const로 모듈 맨 앞에 선언합니다.

Step 1: 유저폼 만들기

(1) VB Editor 상태에서(Alt + <F11>), 빈 유저폼(UserForm)을 하나 삽입합니다.

(2) 아래의 그림을 참고하여 컨트롤들을 삽입한 다음, 속성을 변경해 줍니다.

Sheet Zooming 스크롤바와 Sheet Scrolling 스크롤바가 있는 유저폼
아이엑셀러

① Frame 컨트롤

컨트롤명변경할 속성변경 내용
Frame1CaptionSheet Zooming
Frame2CaptionSheet Scrolling
Frame3Caption캡션을 없앰

② Label 컨트롤

컨트롤명변경할 속성변경 내용
Label1NamelblZoom

③ ScrollBar 컨트롤

컨트롤명변경할 속성변경 내용
ScrollBar1NamescrZoom
ScrollBar2NamescrColumns
ScrollBar3NamescrRows

④ CommandButton 컨트롤

컨트롤명변경할 속성변경 내용
CommandButton1AcceleratorC
CaptionClose
NamebtnClose

Step 2: 코드 작성하기

(3) 이제 각 컨트롤에 지능을 부여하는 작업입니다.

(1) 모듈 맨 위의 상수 선언

먼저, 코드 창의 맨 위 부분에 아래의 한 줄을 첨가합니다.

Option Explicit
Const strZoom = "현재 화면 배율은 "
'//이처럼 모듈시트의 맨 앞부분에 즉, 프로시저가 시작되기 전에 변수(또는 상수)를 지정해 주면
'//그 모듈시트 내의 어느 프로시저에서든 Dim으로 별도 선언하지 않고서도 사용을 할 수가 있는
'//것입니다. 그런데 새로운 것이 하나 나왔지요? 지금까지는 변수를 선언할 때는 Dim으로 선언을
'//해 주었는데 이번에는 Const로 선언을 했군요. 변수란 Variable 즉, 변할 수 있는 값을 말합니다.
'//그런데 변화하지 않는 값에 대해서는 이렇게 Const(Constants, 상수)로 선언을 합니다. 변수가
'//아닌 상수를 선언해 주는 것입니다.

(2) 초기화 이벤트

다음으로, 유저폼 내에서 컨트롤이 없는 빈 영역을 더블클릭해서 코드 창을 불러 냅니다. 현재 상태에서는 Private Sub UserForm_Click()이라는 이벤트가 발생하게 될 것입니다. 이벤트 선택 버튼에서 Initialize를 선택하면 Private Sub UserForm_Initialize 이벤트가 나타나는데 이 이벤트는 아래의 코드를 입력합니다.

Private Sub UserForm_Initialize()
    lblZoom.Caption = strZoom & ActiveWindow.Zoom & "% 입니다"
    '//ActiveWindow, 즉 활성화 된 윈도우의 배율을 lblZoom이라는 Label 컨트롤의 캡션값에 집어
    '//넣습니다.

    With scrZoom
        .Min = 50
        .Max = 300
        .SmallChange = 1
        .LargeChange = 10
        .Value = ActiveWindow.Zoom
        '//scrZoom이라는 스크롤바 컨트롤의 최소값을 50, 최대값을 300으로 지정합니다.
        '//그런 다음, SmallChange라는 것은 스크롤바의 좌/우 버튼을 한번 클릭할 때마다 변화하는
        '//값을 지정하는 속성인데 이 값을 1로 지정해 줍니다.
        '//LargeChange 속성은 스크롤바의 버튼 이외의 부분을 클릭할 때 변화하는 값을 지정하는
        '속성으로 이 값은 10으로 지정을 해 줍니다.
    End With

    With scrColumns
    '//시트 스크롤링과 관련된 컨트롤 중에서 가로 방향 스크롤과 관련된 컨트롤의 속성을 변경하는
    '//부분입니다.
        .Min = 1
        .Max = Application.WorksheetFunction.Min(ActiveSheet.Columns.Count, 32767)
        '//최대값은 현재 시트의 컬럼수와 같겠지요?
        .SmallChange = 1
        .LargeChange = 10
        .Value = ActiveWindow.ScrollColumn
        '//ScrollColumn 속성은 맨 좌측열의 열번호를 리턴해 줍니다. 따라서 현재 윈도우의 맨 좌측
        '//열 값을 Value 속성에 담아둡니다.
    End With

    With scrRows
        .Min = 1
        .Max = Application.WorksheetFunction.Min(ActiveSheet.Rows.Count, 32767)
        .SmallChange = 1
        .LargeChange = 10
        .Value = ActiveWindow.ScrollRow
        '//ScrollRow 속성은 최상단 행값을 리턴합니다. 그러므로 현재 윈도우의 최상단 행값을
        '//Value 속성에 저장을 해 둡니다.
    End With
End Sub

(3) 화면 배율 스크롤바

(4) Shift + <F7> 키를 눌러 유저폼을 다시 불러 낸 다음, scrZoom 컨트롤을 더블클릭 하면 scrZoom_Click 이벤트가 나타나는데 아래의 코드를 입력합니다.

Private Sub scrZoom_Change()
    With ActiveWindow
        .Zoom = scrZoom.Value
        lblZoom.Caption = strZoom & .Zoom & "% 입니다"
        '//scrZoom이라는 스크롤바의 Value 속성값을 현재 윈도우의 Zoom 값으로 대치하였군요.
        '//그런 다음, 현재 윈도우의 줌값에 "% 입니다"라는 문자열을 더하여 lblZoom이라는 레이블
        '//컨트롤의 캡션값을 이것으로 대치합니다.
    End With
End Sub

(4) 가로 스크롤바

(5) Shift + <F7> 키를 다시 눌러 유저폼을 호출한 다음, scrColumns 컨트롤을 더블클릭 하면 아래와 같은 Change 이벤트가 나타날 것입니다. 이 이벤트에 다음의 한 라인을 추가합니다.

Private Sub scrColumns_Change()
    ActiveWindow.ScrollColumn = scrColumns.Value
    '//scrColumns라는 스크롤바 컨트롤의 Value 값만큼 화면을 좌/우로 스크롤링 하게 되겠지요?
End Sub

(5) 세로 스크롤바

(6) Shift + <F7>을 누르고 이번에는 scrRows 컨트롤을 더블클릭한 다음 아래의 코드를 추가합니다.

Private Sub scrRows_Change()
    ActiveWindow.ScrollRow = scrRows.Value
    '//(5)와 거의 비슷한데 단지 방향만 틀릴 뿐이지요.
End Sub

(6) Close 버튼

(7) 다시 Shift + <F7>키를 누르고 이번에는 Close 버튼을 더블클릭 한 다음 코드를 삽입합니다.

Private Sub btnClose_Click()
    Unload Me
End Sub

(7) 유저폼 호출

(8) 마지막으로, 이 유저폼을 호출할 프로시저를 일반 VBA 모듈에 만듭니다.

Sub ShowForm()
    UserForm1.Show
End Sub

이제 워크시트 상에서 위 프로시저를 지정해 주면 실행이 될 것입니다. 이상 끄~읕!

마무리

다음 시간에…

정리 — 화면 제어 핵심

구분 사용한 코드 역할
상수 선언 Const strZoom = "현재 화면 배율은 " 모듈 전체에서 사용
배율 ActiveWindow.Zoom = scrZoom.Value 화면 배율
가로 스크롤 ActiveWindow.ScrollColumn 맨 왼쪽 열 번호
세로 스크롤 ActiveWindow.ScrollRow 맨 위 행 번호
변화량 .SmallChange / .LargeChange 스크롤바 이동량

자주 묻는 질문 (FAQ)

Q1. Const와 Dim은 어떻게 다른가요?

Dim은 변할 수 있는 변수를 선언하고, Const는 변하지 않는 값(상수)을 선언합니다.

Q2. SmallChange와 LargeChange의 차이는 무엇인가요?

SmallChange는 스크롤바의 화살표 버튼을 한 번 누를 때, LargeChange는 버튼 이외의 부분을 클릭할 때 변하는 값입니다.

Q3. ScrollColumn과 ScrollRow는 무엇을 돌려주나요?

각각 현재 윈도우의 맨 왼쪽 열 번호와 맨 위쪽 행 번호를 돌려줍니다.

마치며

기초만 잘 익혀 두면 그 다음은 응용의 문제입니다.