- 최초 작성일: 2000-04-02
- 최종 수정일: 2026-09-30
- 조회수: 19 회
- 작성자: 권현욱 (엑셀러)
- 강의 제목: 시트 맘대로 주무르기
들어가기 전에
오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.
이번 강좌에서는 Excel의 기본 작업영역인 시트에 대해 알아보도록 하겠습니다.
시트 맘대로 주무르기
핵심 요약: 시트 다루기
Worksheets 컬렉션과 ActiveSheet를 이용해 시트를 활성화하고, 이름을 바꾸고, 새 시트를 원하는 위치에 추가할 수 있습니다.
- 활성화: Worksheets("sheet2").Activate
- 이름 변경: ActiveSheet.Name = "MySheet"
- 추가: Worksheets.Add after:=Worksheets(i)
- 배열: 같은 성격의 변수를 한꺼번에 만들고 ReDim으로 크기를 재지정합니다.
Step 1: 활성 시트 이름 알아내기
아래의 버튼을 눌러 보세요.
이 버튼에는 아래의 코드가 연결되어 있습니다.
Sub WhatsThisSheet()
MsgBox "지금 보시는 시트는 " & ActiveSheet.Name & "입니다..."
End Sub
MsgBox라는 명령어는 뒤에 있는 내용을 화면상에 나타내라는 명령어이고… 그 다음에 Activesheet.Name이라는 것은(이것을 Property, 즉 속성이라고 부릅니다) 지금 활성화되어 있는 시트의 이름을 알아내라는 명령입니다.
Active라는 단어는 아주 빈번히 사용되는 것이므로 잘 기억해 두시기 바랍니다. ActiveCell, ActiveWindow, ActivePane, ActiveWorkbook, ActiveChart, ActiveSelection,…
보통 우리가 숫자나 문자를 입력하고 작업하고 하는 시트는 "워크시트"라고 하지요. 이 워크시트 말고도 여러 종류의 시트가 더 있습니다.
- 모듈시트
- 차트시트
- 피벗차트시트
- 다이얼로그시트
복잡해지지요?
워크시트를 제외한 나머지 시트에 대해서는 다음에 알아 보기로 하고 이번 시간에는 워크시트에 대해 집중적으로 알아봅니다.
참고: 다이얼로그시트는 Excel 5.0/95 시절의 대화상자 기능으로, 지금은 UserForm(사용자 정의 폼)이 그 역할을 대신합니다. 피벗차트시트도 최근 버전에서는 일반 차트 시트와 같은 방식으로 만들어 쓰는 경우가 대부분입니다.
Step 2: 시트 활성화하고 이름 바꾸기
딴 것을 또 하여 보지요. 아래의 버튼을 누르세요.
갔다 오셨나요? sheet2가 활성화 되었지요? 코드를 살펴볼까요.
Sub GoToSheet2()
Worksheets("sheet2").Activate
End Sub
Worksheets("sheet2"), 즉 여러 가지 워크시트 중에서 sheet2를 Activate(활성화) 시키라는 것이지요.
이번에는 이 시트의 이름을 바꾸어 볼까요? 어떻습니까. Sheet2가 선택이 되면서 시트의 이름도 "Sheet2"에서 "MySheet"로 바뀌지요?
Sub RenSheetName()
Worksheets("sheet2").Activate
ActiveSheet.Name = "MySheet"
End Sub
딱 한 줄이 추가가 되었네요. ActiveSheet.Name = "MySheet" 활성화된시트.이름 = "MySheet" 즉 활성화된 시트의 이름을 "MySheet"로 바꾸어라
여기서 한가지 주의할 점이 있습니다. 보통 수학에서 A=B라고 하게 되면 'A와 B는 같다'라는 것으로 인식되나 Visual Basic을 비롯한 프로그래밍에 있어서는 우측의 값을 좌측으로 대입, 즉 이 경우에는 B의 값을 A에 대입하라'는 것입니다.(단 If 조건문에서는 If A=B 라고 하게 되면 A와 B가 같은지 같은지를 비교하는 것이긴 합니다만…)
이번에는 MySheet의 이름을 다시 원래대로 바꾸겠습니다.
이름이 원래대로 바뀌었지요?
Sub RenSheetName2()
Worksheets("MySheet").Name = "Sheet2"
End Sub
Step 3: 워크시트 추가하기
이번에는 워크시트를 한장 추가시켜 볼까요?
Sub AddSheet()
Worksheets.Add
Worksheets("sheet1").Activate
End Sub
버튼을 누를 때마다 워크시트가 한장씩 추가 되지요? 그런데 현재 워크시트가 앞에 추가가 되는군요. 마지막에 추가하려면 어떻게 하면 될까요? 옆의 버튼을 눌러 보세요. 뜻한 바대로 움직이지요?
Sub AddSheet2()
Dim i As Integer
i = Worksheets.Count
Worksheets.Add after:=Worksheets(i)
End Sub
코드는 별다른 것이 없고, 변수를 하나 선언해 주었군요. I라는 변수를 선언해 주고 여기에다가 Worksheets.Count 즉, 현재 워크북에 있는 워크시트의 개수를 세어서 저장을 해주고,
Worksheets.Add after:=Worksheets(I) 즉, 워크시트를 하나 삽입하되 after:=Worksheets(I) 니까 현재 워크시트의 총 개수 이후에 삽입을 하라는 것이지요. 이해가 가시는지?
직접실행창에 가서 worksheet(1).select라고 입력하고 엔터키를 쳐 보세요. 현재 워크북의 첫번째 워크시트 그러니까 이 파일에서는 "sheet1"를 select, 즉 선택할 것입니다. 마찬가지로 worksheet(2).select하게 되면 두번째에 있는 워크시트를 선택하게 되겠지요.
강좌를 들으시는 아니 보시는 분 중에는 '뭐 이런 쉬운 것을 일일이 설명하나?' 하는 분도 있을텐데 아는 내용이라도 다시 한번 들어두시면 나중에 도움이 될 것입니다.
Step 4: 워크북 안의 시트 이름 알아내기
이번에는 현재 워크북에 어떤 시트들이 있는지 알아내라고 컴퓨터에게 일을 시켜 볼까요?
Sub WhatsInThisbook()
Dim strName() As String
Dim i As Integer
Dim intCount As Integer
intCount = Sheets.Count
ReDim strName(1 To intCount) As String
For i = 1 To intCount
strName(i) = Sheets(i).Name
MsgBox strName(i)
Next i
End Sub
복잡하고 어지럽지요?(사실 알고보면 아무 것도 아닙니다) 못보던 것도 하나 나왔네요(노란색으로 표시한 부분) 바로 배열(Array) 이라는 것입니다. 쉽게 설명하자면 같은 성격을 가진 변수를 한꺼번에 만드는 것이라고 할 수 있습니다.
배열이 없다면?
예를 들어 볼까요?(예를 안 들리가 없지!)
지점이 20개가 있고 그 지점의 실적을 관리한다고 할 때 배열이라는 것이 없다면 각 지점의 실적들을 어떻게 변수를 지정해야 할까요? 아마 아래와 같이 해야할 것입니다.
Dim 지점1 As Integer
Dim 지점2 As Integer
Dim 지점3 As Integer
Dim 지점4 As Integer
Dim 지점5 As Integer
Dim 지점6 As Integer
Dim 지점7 As Integer
Dim 지점8 As Integer
Dim 지점9 As Integer
………………………
Dim 지점20 As Integer
지점 20개의 실적을 관리하는데 변수도 20번이나 선언을 해 주어야겠지요(배열이 없다면!!!) 머 이정도 선언해 주는 것 쯤이야! 하시는 분도 있겠지요? 그렇담 이 20개 지점들의 월별 실적을 저장해 둘 변수를 지정해야 한다면 어떻게 해얄 까요?
배열이란 것이 없다면 또 아래와 같이 무식한(?) 방법을 동원해야 겠지요.
위의 변수 선언에다가…
Dim 지점1의1월 As Integer
Dim 지점1의2월 As Integer
Dim 지점1의3월 As Integer
…………………………………
Dim 지점2의1월 As Integer
Dim 지점2의2월 As Integer
Dim 지점2의3월 As Integer
…………………………………
이런 식으로 변수선언을 20 X 12 즉 240번을 해 주어야 할 것입니다. 그 어떤 프로그래머도 위와 같은 방법으로 변수를 선언하지는 않겠지요?
배열을 사용하면
배열을 사용하게 되면 간단하게 해결이 됩니다. 즉
Dim 지점(20) As Integer
Dim 실적(12) As Integer
이렇게 해 주면 되는 것입니다. (물론 각 지점별 월별 실적을 모두 다른 변수에 저장할 필요가 있다면 2차원 배열을 선언하면 더 간단하게 해결이 되는데 그것은 본 강좌의 범위를 벗어나는 것 같고…)
참고: Dim 지점(20) As Integer는 20개가 아니라 인덱스 0~20의 21개 요소를 만듭니다. 1부터 20까지만 쓰려면 Dim 지점(1 To 20) As Integer처럼 범위를 명시하시는 것이 명확합니다.
어쨌거나 배열을 사용하는 이유는 메모리의 효율적인 관리를 위해서라는 사실을 반드시 기억하시기 바라며 그냥 넘어 가세요. 나중에 계속 반복해서 설명을 드릴 테니까…
코드 풀이
일단 변수를 선언해 주고,
Sheets.Count이므로 현재 워크북에 있는 시트의 수를 모두 세어서 이것을 intCount라는 변수에 저장을 해 두고, ReDim문을 써서 배열을 재선언 해 준 다음(이것을 동적배열이라고 합니다. 그냥 넘어 가세요) ReDim strName(1 To intCount) As String이므로 strName이라는 배열변수의 크기를 현재 워크북에 있는 워크시트의 숫자만큼 재지정해 주었습니다.
For ~ Next 반복문에 의해 워크시트의 숫자만큼 순환문이 돌면서 메시지 박스에 해당 시트의 이름들을 차례로 표시하게 되는 것이지요.
Step 5: 시트 이름을 셀에 출력하기
어떻습니까. 이해가 가시는지? 어렵습니까? 기왕 어려운 김에(?) 하나 더 보고 가지요. 아래의 버튼을 누르세요.
시트의 이름들이 이번에는 MsgBox에 나오는 것이 아니고 셀에 직접 표시가 되지요?
다른 것은 바뀐게 없고 딱 한 줄만 수정하였습니다.
Sub WhatsInThisbook2()
Dim strName() As String
Dim i As Integer
Dim intCount As Integer
intCount = Sheets.Count
ReDim strName(1 To intCount) As String
For i = 1 To intCount
strName(i) = Sheets(i).Name
Cells(195 + i, 4) = strName(i)
Next i
End Sub
Cells(행숫자, 열숫자) 하게 되면 특정 셀을 선택하게 됩니다. 즉 Cells(4,3) = C4 셀을, Cells(10,2) = B10 셀을, Cells(195,4)= D195 셀을 각각 나타나게 되는 것이지요.
따라서 위 구문에서 Cells(195+I,4)=strName(I)니까 D195, D196, D197,… 셀을 선택해 가면서 각 시트의 이름들을 각각의 셀에 뿌려주게 되는 것입니다.
마무리
다음 시간에 계속…
정리 — 시트 다루기 코드 요약
| 작업 | 코드 | 설명 |
|---|---|---|
| 시트 활성화 | Worksheets("sheet2").Activate | 지정한 시트를 활성화 |
| 이름 변경 | ActiveSheet.Name = "MySheet" | 활성 시트의 이름 변경 |
| 마지막에 추가 | Worksheets.Add after:=Worksheets(i) | i는 Worksheets.Count |
| 시트 이름 출력 | Cells(195 + i, 4) = strName(i) | D195부터 아래로 표시 |
자주 묻는 질문 (FAQ)
Q1. Worksheets.Add는 어느 위치에 시트를 추가하나요?
기본적으로 현재 시트의 앞에 추가됩니다. 마지막에 추가하려면 after:=Worksheets(Worksheets.Count)를 지정합니다.
Q2. VBA에서 A=B는 무슨 뜻인가요?
수학의 "같다"가 아니라 오른쪽 값을 왼쪽으로 대입하라는 뜻입니다. 단 If 조건문에서는 같은지를 비교합니다.
Q3. 배열을 사용하는 이유는 무엇인가요?
같은 성격의 변수를 하나로 묶어 선언해 코드를 간단하게 하고 메모리를 효율적으로 관리하기 위해서입니다.
마치며
어렵더라도 나중에 계속 반복해서 설명드리니 지금은 그냥 넘어가셔도 좋습니다.