Excel & IT Info

아이엑셀러 닷컴, 엑셀러TV

VBA

[VBA 입문] 05강. 워크시트 개체

권현욱(엑셀러) 2023. 9. 27. 16:00
반응형

들어가며

엑셀네 집안 No. 1이 워크북이었으니 No. 2는 워크시트가 될 것임은 능히 짐작할 수 있습니다. 워크시트를 이용하면 컴퓨터 생활이 얼마나 편리해질지 기대됩니다. 듬직한 맏이에 이어 재주 많은 둘째를 만나러 갈 준비되셨나요? 출발합니다.

권현욱(엑셀러) | 아이엑셀러 닷컴 대표 · Microsoft Excel MVP · Excel 솔루션 프로바이더 · 작가

워크시트 개체

워크북 오브젝트의 하위에 있는 오브젝트 중 하나로서 워크시트를 만들어 주는 것이 워크시트 개체(Worksheet Object)입니다. 엑셀네 집안 No. 2라고 할 수 있죠. 워크시트 개체도 워크북 개체처럼 두 종류가 있습니다. 뒤에 's'가 붙은 것과 붙지 않은 것. s가 붙은 개체를 뭐라고 부르죠? 그렇습니다. 컬렉션 개체!

(이미지: 아이엑셀러 닷컴)

 

워크시트 개체란 '워크시트 그 자체'를 말합니다. 예를 들어, 우리가 돈을 빌리려면 돈을 가진 사람이 누구인지를 알고 있어야 가서 사정을 하든, 협박(?)을 하든 해도 하겠지요? 워크시트의 이름을 바꾼다거나 셀에 어떤 값을 입력하고자 할 때에도 마찬가지입니다.

Sub findActiveSheetName()
    MsgBox "지금 보시는 시트는 " & ActiveSheet.Name & "입니다"
End Sub

 

이 코드를 실행하면 현재 시트(ActiveSheet)의 이름을 메시지 상자(MsgBox)에 표시해 줍니다. MsgBox는 지정한 명령을 수행하고 난 결과를 화면에 표시해 주는 함수입니다. Activesheet.Name은 지금 선택되어 있는 시트(ActiveSheet)의 이름(Name)을 알아내라는 지시입니다.

 

Active라는 단어는 ActiveCell, ActiveWindow, ActivePane, ActiveWorkbook, ActiveChart 등과 같이 자주 사용되므로 잘 기억해 두시기 바랍니다. 다른 사람에게 일을 시킬 때, "철수야, 물 좀 떠 와"라고 할 수도 있지만, "거기 움직이는 녀석, 물 좀 떠 와"라고 할 수도 있겠지요? Active는 후자에 해당되는 표현이라고 이해하시면 되겠습니다.

 

워크시트 삽입하기

워크시트를 삽입하려면 Add 메서드를 사용합니다. 다음 프로시저를 실행하면 현재 시트 앞(왼쪽)에 새로운 워크시트가 하나 추가됩니다. 이때 그냥 Worksheet가 아니라 Worksheets, 즉 컬렉션 개체에 접근한 다음 Add 메서드를 사용한다는 점에 유의하세요.

Sub addWorkSheet()
    Worksheets.Add
End Sub

 

Add 메서드 뒤에 after, Count 인수를 추가하면 시트를 삽입할 위치와 매수를 지정할 수 있습니다. 아래는 통합 문서 내의 첫 번째 워크시트 뒤에 2개의 워크시트를 한 번에 삽입하는 코드입니다.

Sub addWorkSheet2()
    Worksheets.Add after:=Worksheets(1), Count:=2
End Sub

시트 선택하고 이름 바꾸기

시트를 선택할 때에는 Select 메서드를 이용합니다. Select 대신 Activate 메서드를 사용할 수도 있습니다. 어느 경우든 선택하려는 시트가 있어야 오류가 발생하지 않겠지요? 

Sub selectSheet()
    Worksheets("Sheet1").Select
End Sub

 

이름을 바꾸려면 Name 속성을 사용합니다.

Sub renameSheetName()
    Worksheets("Sheet2").Activate
    ActiveSheet.Name = "MySheet"
End Sub

 

수학에서는 A = B라고 하면 'A와 B는 같다'라는 뜻이지만 프로그래밍에서는 '우측의 값을 좌측(변수)에 대입하라'는 의미입니다. 다만 If 조건문 등에서와 같이 조건을 비교하는 구문에서는 'If A = B'라고 하면 A와 B가 같은 지 여부를 비교합니다.


시트 이동, 복사하기

시트를 이동할 때에는 Move 메서드를 사용합니다. 시트를 이동하는 것이 아니라 복사를 하려면 어떻게 하면 될까요? 짐작하시는 것처럼 Move 대신 Copy 메서드를 사용하면 됩니다.

Sub sheetMove()
    Worksheets("Sheet1").Move after:=Worksheets("Sheet3")
    ' Sheet1을 Sheet3 뒤(오른쪽)로 이동'
End Sub

 

만약 after 인수를 생략하여 Worksheets("Sheet1").Move라고만 하면 어떻게 될까요? Sheet1이 새로운 통합 문서로 옮겨집니다. 만약 Sheet1이 없거나 통합 문서 내에 하나뿐이라면 오류가 발생합니다. [직접 실행 창]에 입력해서 확인해 보세요. 코딩은 머리가 아닌 손으로 하는 겁니다. 그래야 머릿속에 남습니다.


시트 삭제하기

시트를 삭제할 때에는 Delete 메서드를 사용합니다. 그런데 시트를 삭제하려고 하면 그림과 같은 메시지가 나타나므로 '삭제' 버튼을 매번 눌러주어야 하는 번거로움이 있습니다.

 

 

이 문제를 해결하려면 DisplayAlerts 속성을 사용합니다. DisplayAlerts는 애플리케이션 개체에 딸린 속성입니다. 이 속성도 실무에서 빈번하게 사용되므로 친해지도록 하세요.

Sub deleteSheet()
    Application.DisplayAlerts = False
    ActiveSheet.Delete
    Application.DisplayAlerts = True
End Sub

 

시트를 지우기 전에 DisplayAlerts 속성을 False로 합니다. 시트를 지우고 나서는 다시 초기 상태(True)로 되돌려 놓는 것이 좋습니다. 워크시트를 삭제할 때 하나의 공식처럼 자주 사용되는 구문입니다.


 

나가며

이 정도면 워크시트 개체와 관련하여 반드시 알아야 할 사항들은 거의 다 알아보았습니다. 이제 처음으로 돌아가서 코드를 VB Editor의 코드 창에 하나씩 입력해 가면서 자신의 것으로 만드시기 바랍니다. 파일을 미리 백업해 두거나 연습용 파일을 이용하시는 것 잊지 마시고요.

Excel과 VBA의 모든 것 아이엑셀러 닷컴 · 강사들이 숨겨 놓고 보는 엑셀러TV

반응형