본문 바로가기

엑셀/VBA

액셀 VBA에서 개체와 컬렉션에 대해 알아보기

반응형

엑셀을 구성하는 다양한 요소들이 있습니다. 이러한 요소들을 개체(Object)라 합니다. 이 개체들은 서로 연결되어 있고 이렇게 연결되어 있는 개체들을 통해 엑셀이 작동합니다. 여기서 서로 연결되어 있는 개체들의 관계를 나타내는 것을 개체 모델이라 합니다.

 

VBA는 프로그래밍 언어이면서도 다른 언어와는 달리 단독으로 프로그램을 만들어 실행할 수 없는 언어입니다. 마치 매크로를 작성하고 그 매크로를 편집하는데 보조 역할을 하는 언어로 인식될 수 있지만 이런 식으로 매도하여 터부시 하기보다는 VBA를 사용함으로써 엑셀을 사용하는데 제공해주는 업무 편의성 및 작업 단순화 면을 고려한다면 엑셀을 사용하시는 사용자 입장에서는 다른 프로그래밍 언어를 사용하는 것보다 쉬운 방법으로 프로그래밍할 수 있다는 장점이 있습니다.

 

 

 

1. 개체 모델

 엑셀의 개체에는 엑셀을 사용하시거나 매크로를 하시다 보면 많이 보시는 Application, Workbook, Worksheet, Range 등이 있습니다.  그럼 이 개체들이 어떻게 연결되어 있는지 확인해보겠습니다.

 

Application

Workbook

Worksheet

Range

 

Application은 프로그램을 나타내는 개체입니다. 이는 VBA로 제어 가능한 프로그램 모두를 의미합니다. 저희는 이 프로그램 중에서 엑셀에 대해 사용하려고 하므로 Application은 엑셀 프로그램 자체를 의미하게 됩니다.

 

Workbook은 엑셀 파일을 의미하며 다른 말로는 통합문서라고 합니다. 위의 그림에서 보면 Application에서 Workbook으로 화살표가 그려져 있는데 이런 관계를 부모 자식 관계로 풀이합니다. 즉 ApplicationWorkbook의 부모가 되고 WorkbookApplication의 자식이 되는 것이죠... 

 

Worksheet는 엑셀에서 워크시트를 의미하며 부모는 Workbook이 됩니다.

 

Range는 워크시트의 셀을 의미하며 워크시트는 셀들로 구성되어 있습니다. Range의 부모는 Worksheet가 됩니다. 또한 이런 관계를 종속관계라 말하며 Range는 Worksheet에 종속되었다고 말합니다.

 

2. 개체와 컬렉션

 엑셀에서 개체는 워크시트를 한 파일내에서 여러 개를 만들어 사용할 수 있듯이 한 프로그램 내에서 같은 개체를 여러 번 사용할 수 있습니다. 

 

엑셀에서 워크시트를 여러 개 만들게 되면 Workbook에 종속되는 Worksheet가 여러 개 생성됩니다. 그런데 이 Worksheet는 Workbook 입장에서는 모두 동일한 개체입니다. 그러므로 여러 개의 Worksheet 중에서 어느 하나를 지정하기 어렵게 됩니다. 이를 위해 동일한 Worksheet를 묶어서 관리하는 컬렉션이 필요하게 되는 것입니다. 이 Worksheet의 컬렉션을 Worksheets 컬렉션이라 부릅니다.

 

Range는 별도의 컬렉션이 필요치 않은데 이는 셀을 구분할 수 있는 주소가 존재하기 때문입니다. 즉, 여러 개의 Range 개체가 있더라도 이를 셀 주소로 구분 가능하므로 컬렉션이 필요치 않습니다. 어떻게 보면 컬렉션을 셀 주소로 사용한다고 보셔도 될 것 같습니다.

 

 

 

3. 컬렉션에서 개체 선택 방법

Worksheets 컬렉션에서 개체를 지정하는 방법은 개체의 Name(이름)이나 Index(번호)를 이용하는 것입니다.

 

3.1 Name

 Name은 워크시트에 붙여준 시트 이름을 말하며 이 시트 이름을 이용하여 워크시트를 지정할 수 있습니다.

사용방법은 다음과 같습니다.

 

    Worksheets("sheet1")

 

이는 Worksheets 컬렉션에서 sheet1이란 이름을 갖는 워크시트를 가리키는 것입니다.

 

예)

 

    Worksheets("sheet1").Visible = xlSheetHidden

 

sheet1을 숨기기하라는 의미입니다. sheet1 워크시트가 보이지 않게 됩니다. 이를 다시 보이게 하려면 다음과 같이 코딩합니다.

 

    Worksheets("sheet1").Visible = xlSheetVisible

 

3.2 Index

Index는 인덱스 번호를 이용하여 개체를 선택합니다. 엑셀의 워크시트는 새로 생성하게 되면 차례로 우측에 만들어집니다. 이는 각각 인덱스 번호를 갖게 되는데 가장 좌측에 있는 워크시트가 1번이고 우측으로 가면서 2번, 3번,... 이런 방식으로 번호가 매겨집니다. Index는 바로 이 번호를 이용하는 것입니다.

사용방법은 다음과 같습니다.

 

    Worksheets(1)

 

이는 Worksheets 컬렉션에서 인덱스 번호가 1번인 가장 왼쪽에 있는 워크시트를 가리키는 것입니다.

 

3.1항에서 sheet1을 숨겼다가 다시 보이게 한 코딩을 Index를 이용하여 다시 코딩하면 다음과 같습니다.

 

    Worksheets(1).Visible = xlSheetHidden

    Worksheets(1).Visible = xlSheetVisible

 

반응형