- 최초 작성일: 2002-01-04
- 최종 수정일: 2026-09-29
- 조회수: 21 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 특정영역 내에서만 커서 움직이기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
질문 하나
안녕하세요.
수식이 있는 셀을 수정할 수 없게 하는 방법은 제 생각으로 아래 3가지 정도입니다.
1. 사용자가 주의 해서 입력한다.
2. 셀서식의 잠금과 시트보호를 사용한다.
3. 셀서식의 잠금과 Worksheet_SelectionChange() 와 같은 이벤트에서 VBA로
셀이 선택되지 않게 한다.
1번 방법은 당연한 것이지만 엑셀 사용이 서툴다면 좋은 방법이 아니고,
(사실 저희 회사에 사용에 서툰 분이 계셔서 도움이 될까 하고 질문합니다)
2번은 현재 사용하고 있지만 조금 불편합니다 (실수로 변경하면 에러메시지 발생)
그래서 코드를 작성해서 좀더 능동적으로 처리할 수 있으면 합니다.
금방 생각나는 방법은,
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveCell.Locked = True Then
ActiveCell.Next.Activate
End If
End Sub
위 코드는 오른쪽 방향으로 이동할 때는 괜찮은데,
왼쪽이나 위, 아래방향으로 갈 때는 잘 안되더군요
위의 코드 말고 더 나은 방법을 아시는 분께서 도움을 주셨으면 합니다.
특정영역 내에서만 커서 움직이기
핵심 요약
- 시트 보호와 셀의 잠금 속성을 이용하면 사용자가 선택할 수 있는 영역을 제한할 수 있습니다.
- 입력할 영역의 잠금을 해제한 뒤 시트를 보호하면 보호 대상과 입력 가능 영역을 구분할 수 있습니다.
- Workbook_Open에서 EnableSelection을 xlUnlockedCells로 설정하면 파일을 열 때마다 잠금 해제된 셀만 선택하도록 제한할 수 있습니다.
아시는 바와 같이, EXCEL에서는 보통 다음이 세 가지 방법으로 통합문서를 보호할 수 있습니다.
- 통합문서 전체를 대상으로 하는 경우
- 시트를 대상으로 하는 경우
- 특정 셀(영역)을 대상으로 하는 경우
위의 질문하신 분과 같은 경우, VBA를 사용하지 않고 X0058 강좌에서 소개해 드린 "셀 보호하기"를 이용하시면 편이 가장 간편하지 않을까 생각됩니다.
하지만 기왕에 "잠금" 속성에 대해 언급을 하셨으니까 또다른 방식으로 접근해 보도록 하지요. 버튼을 눌러 보세요.
특정한 영역(노란색으로 표시한 영역) 내에서만 커서가 움직이지요? 이것은 어떻게 한 것일까요? 방법은 여러 가지가 있겠지만 질문 내용 중에 언급된 셀의 "잠금" 속성을 이용해 보았습니다.
(1) 보호하고자 하는 영역(예를 들면 Stage 시트의 노란색으로 표시한 영역)을 선택합니다.
(3) '서식-셀' 메뉴에서 '보호' 탭을 선택해 보면 '잠김' 항목 앞에 체크 표시가 되어 있을 것입니다. 셀의 기본 속성이 '잠김'으로 지정되어 있다는 얘기이지요. 이 항목을 클릭하여 체크 표시를 없애 줍니다.
(4) '도구-보호' 메뉴에서 '시트 보호'를 선택한 다음, '확인' 버튼을 클릭합니다. (엑셀 XP의 경우, 그림과 같은 '시트 보호' 대화 상자가 나타나는데 기본적으로 잠긴 셀 선택', '잠기지 않은 셀 선택' 항목에 모두 체크 표시가 되어 있을 것입니다. 이 중에서 '잠긴 셀 선택'을 다시 한번 클릭하여 체크 표시를 없애 줍니다)
(4) '도구-매크로-Visual Basic Etidor' 메뉴를 선택합니다.
(5) '프로젝트 탐색기' 창에서 ThisWorkbook을 더블 클릭하면 화면 오른쪽부분(이 영역을 '코드창'이라고 부릅니다)에 아래의 코드를 '복사/붙여 넣기' 합니다.
Private Sub Workbook_Open()
Worksheets("Stage").EnableSelection = xlUnlockedCells
End Sub
이렇게 해 놓으면 해당 워크북(파일)이 열릴 때마다 위의 코드가 실행이 됩니다. 즉 셀 속성이 '잠김'으로 지정된 셀만 선택을 할 수 있게 됩니다.
오늘은 여기까지…
정리 — 특정 영역 내에서만 커서 움직이게 하기
| 항목 | 설명 |
|---|---|
| 핵심 속성/기능 | 셀 '잠금' 속성, 시트 보호, VBA EnableSelection |
| 핵심 코드 | Worksheets("Stage").EnableSelection = xlUnlockedCells (Workbook_Open 이벤트) |
| 설정 절차 | 입력 허용 영역의 잠금 해제 → 시트 보호(잠긴 셀 선택 해제) → ThisWorkbook에 VBA 코드 입력 |
| 적용 시점 | Workbook_Open 이벤트로 파일을 열 때마다 자동 적용 |
| 활용 목적 | 모든 방향(상하좌우)에서 잠금 해제된 특정 영역 내로만 셀 선택을 제한 |
자주 묻는 질문 (FAQ)
Q1. Workbook_Open 이벤트에 코드를 넣는 이유는 무엇인가요?
Worksheets("Stage").EnableSelection = xlUnlockedCells 코드를 Workbook_Open 이벤트에 넣어 두면 해당 워크북(파일)을 열 때마다 자동으로 실행되어, 사용자가 파일을 열 때마다 매번 별도로 설정할 필요 없이 잠금 해제된 셀만 선택할 수 있도록 제한이 항상 적용됩니다.
Q2. 셀의 '잠금' 속성과 '시트 보호'는 어떤 관계인가요?
셀은 기본적으로 '잠김' 속성이 켜져 있지만, 시트 보호를 실행하기 전까지는 잠금 속성이 실제로 작동하지 않습니다. 입력을 허용할 영역만 잠금을 해제한 뒤 시트 보호를 적용해야 잠긴 셀은 보호되고 잠금 해제된 셀만 선택·입력이 가능해집니다.
Q3. Worksheet_SelectionChange 이벤트로 커서를 제어하는 방법과 비교하면 어떤 장점이 있나요?
질문에서 제시된 Worksheet_SelectionChange 방식은 ActiveCell.Next.Activate로 오른쪽 이동만 처리해 왼쪽·위·아래 이동 시 제대로 동작하지 않는 한계가 있습니다. 반면 셀 잠금 속성과 EnableSelection = xlUnlockedCells를 조합하면 방향에 상관없이 잠금 해제된 영역 내에서만 커서가 움직이도록 일관되게 제한할 수 있습니다.
마치며
오늘은 여기까지… 질문하신 것처럼 SelectionChange 이벤트로 방향별 예외를 일일이 처리하기보다, 셀 잠금 속성과 EnableSelection 설정을 조합하면 훨씬 간단하고 안정적으로 커서 이동 범위를 제한할 수 있습니다.