• 최초 작성일: 2005-08-16
  • 최종 수정일: 2026-09-30
  • 조회수: 16 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 직전에 열어본 시트로 이동하기

들어가기 전에

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

Exceller 사이트에 거의 상주하시면서 좋은 글과 답변을 많이 주시는 김우수님께서 보내주신 내용입니다. '사용자 제공 자료' 코너에 올려드리려고 하였으나 극구 고사를 하시는 바람에 VBA 강좌 시간에 다루게 되었습니다. ^^

메일 하나 (김우수님)

안녕하세요.Exceller님! 이렇게 뵙게 되니 감회가 또 다르군요^^

다름이 아니오라 Exceller님의 홈페이지에 올라 오는 질의 중에 간혹 특정 시트에서 직전에 열어 본 시트로 갈 수 있는 방법에 대한 내용이 있어 허접(?)합니다만, 한 번 만들어 봤습니다. 자세한 내용은 첨부파일에 정리하였습니다.

아울러 외람됩니다만, 반드시 [사용자 제공 자료]코너 등에 제 이름으로 소개하지 않으셔도 무방하시다면 그냥 Exceller님께서 VBA강좌로 한 번 다루어 주시기를 삼가 부탁드립니다.

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

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

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


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

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

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

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

직전에 열어본 시트로 이동하기

핵심 요약: 직전에 열어 본 시트로 이동하기

시트를 떠날 때마다 그 시트의 이름과 활성 셀 주소를 이름 정의에 저장해 두고, 버튼을 누르면 저장된 시트로 이동하는 코드입니다.

  • 1단계: Target이라는 이름을 미리 정의해 둡니다.
  • 2단계: Workbook_SheetDeactivate 이벤트에서 떠나는 시트 이름과 활성 셀 주소를 Target에 저장합니다.
  • 3단계: 버튼 프로시저에서 Target 값을 분해해 해당 시트를 선택합니다.

Step 1: 어떤 기능일까요?

간혹 홈페이지에 올라오는 질문 중에 특정 시트에서 직전에 열어 본 시트로 갈 수 있는 방법에 대한 내용이 있습니다. 적당한 시트(예: 서울아산병원 또는 삼성의료원 등)를 선택했다가 다시 Main 시트로 돌아와서 버튼을 누르면 직전에 열어 본 시트로 이동합니다.

Step 2: 코드 살펴보기

코드에 대한 내용도 Exceller가 별도의 설명을 드릴 필요도 없을 만큼 설명을 잘 해 주셨습니다. 혹시 학습하시다 궁금한 부분이 있으시면 게시판에 질문주시기 바랍니다.

먼저 ThisWorkbook 개체에 작성하는 Workbook_SheetDeactivate 이벤트 프로시저입니다.

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

    Dim MySht As String
    Dim MyAdd As String

    MySht = Sh.Name
    If MySht = "Main" Then Exit Sub
    ' Main 시트에서 나갈 때는 기록하지 않습니다.

    MyAdd = ActiveCell.Address
    Names("Target").Value = "=" & MySht & "!" & MyAdd

End Sub

위 프로시저는 현재 열려 있는 통합 문서에서 특정 시트가 닫힐 경우, 즉 비활성화(SheetDeactivate)될 때 발생하는 이벤트 프로시저로서, 매개변수 Sh에 가장 최근에 닫힌 시트(방금 열어 본 시트)의 이름을 담은 다음, [삽입]-[이름]-[정의]에서 Target이라는 이름으로 정의된 참조대상란을 변수 Sh의 값으로 지정하는 내용입니다. (참고로 [삽입]-[이름]-[정의] 메뉴를 차례로 선택하여 Target이라는 이름으로 정의된 참조대상란을 살펴 보시기 바랍니다.)

다음은 버튼에 연결된 모듈 프로시저입니다.

Sub GoThere()

    Dim strWhere As String
    Dim ShtName As String
    Dim i As Long

    ShtName = Names("Target").Value
    i = WorksheetFunction.Find("!", ShtName) - 2
    strWhere = Mid(ShtName, 2, i)
    Sheets(strWhere).Select

End Sub

버튼에 연결된 모듈 프로시저는 위에서 [이름정의]로 지정된 =삼성의료원!$A$35 형태의 값을 문자열형 변수 strWhere의 값으로 받아, Mid 및 Find 함수 등을 사용하여 삼성의료원 형태로 변경한 다음, 해당 시트를 선택(Select)하게 됩니다.

김우수님 덕택에 이번 강좌는 완전히 거저 먹는군요. ^^ 하긴 살다보면 이런 날도 있어야 사는 재미가 배가되는 것이겠지요.

오늘은 여기까지…

정리 — 직전 시트 이동 코드 핵심

구분 사용한 코드 역할
이벤트 Workbook_SheetDeactivate 시트가 비활성화될 때 실행
시트 이름 Sh.Name 방금 떠난 시트의 이름
기록 Names("Target").Value = "=" & MySht & "!" & MyAdd 시트 이름과 셀 주소를 이름 정의에 저장
이름 추출 Mid(ShtName, 2, i) 저장된 값에서 시트 이름만 추출
이동 Sheets(strWhere).Select 해당 시트를 선택

자주 묻는 질문 (FAQ)

Q1. Workbook_SheetDeactivate 이벤트는 언제 발생하나요?

통합 문서에서 어떤 시트가 비활성화될 때, 즉 다른 시트로 이동할 때 발생합니다. 매개변수 Sh에는 방금 떠난 시트가 전달됩니다.

Q2. 이름 정의에 값을 저장하는 이유는 무엇인가요?

프로시저가 끝나면 변수의 값이 사라지지만 이름 정의는 통합 문서에 남아 있으므로 다음 프로시저에서 값을 다시 읽을 수 있습니다.

Q3. 시트 이름에 공백이 있으면 어떻게 하나요?

공백이 포함된 시트 이름은 참조에서 작은따옴표로 묶이므로 이 예제의 Mid 함수 처리 방식에는 그대로 적용되지 않습니다. 그런 경우에는 작은따옴표를 제거하는 처리를 추가하거나 시트 이름을 변수에 직접 저장하세요.

마치며

시트 이동 이벤트와 이름 정의를 조합하면 별도의 변수 저장 없이도 직전 시트를 기억해 두고 되돌아갈 수 있습니다.