[VBA강좌:12] 프로그램의 요소 (2) 내용 - 컬렉션 (Collection) 엑셀 VBA 강좌



아~~  또 이상한 용어가 나옵니다.
컬렉션?   뭐 패션쇼를 연상하는 사람도 있겠고 수집품을 떠올리는 사람도 있겠습니다.

Excel VBA 에서 컬렉션(Collection) 이라고 하는 것은 동일 수준의 Object 들의 집합이라고 흔히들 말하는데..
저는 집합이라고 표현하는 것 보다는 동일 수준의 Object 들의 목록 (List) 이라고 해석하겠습니다.

왜냐하면 컬렉션도 별도의 Object 이기 때문에 집합은 아주 추상적인 개념으로 맞지 않고
Object 목록을 정리해 놓은 우리가 다룰 수 있는 또 다른 Object 의 개념으로 생각하셔야 합니다.

자.  어느 학교에서 선생님이 '김개똥' 이라는 학생을 찾습니다.
그러려면 학교내의 학생부를 열람해야 겠죠?
그래야 그 '김개똥'이가 몇학년 몇반에 있는가 알 수 있게 되고
해당 교실에 들어가 '김개똥' 학생을 만날 수 있게 되는 것입니다.

여기서의 학생목록이 있는 '학생부'가 바로 컬렉션의 의미라고 생각하시면 됩니다.

왜 컬렉션이라는 Object 가 필요한 가는 바로 WorkBook 과 WorkSheet 의 이름 때문 입니다.

앞 포스트에서 잠깐 설명했지만 WorkBook, WorkSheet 오브젝트는 사용자가 임의로 이름을 부여할 수 있습니다.
우리는 엑셀 프로그램에서 여러개 열려있는 파일(WorkBook)의 상단 좌측의 이름을 보고
원하는 파일을 클릭해서 선택하고 하단의 시트(WorkSheet)의 이름을 보고 선택해서
작업을 할 수 있지만 이것이 VBA 는 눈과 마우스가 없기 때문에 접근할 수 있는 방법은
오직 파일과 시트에 부여된 이름을 원하는 이름과 리스트에서 하나씩 대조해 가면서
찾아낼 수 밖에 없기 때문입니다.

컬렉션은 컬렉션 대상 Object 에 s 를 붙혀서 표현합니다.
즉 열려있는 WorkBook (파일) 의 컬렉션은 WorkBooks 이고
특정 WorkBook 내의 WorkSheet(시트) 의 컬렉션은 WorkSheets 로 표현합니다.


여러개의 파일(WorkBook) 중에 원하는 이름을 가진 파일의 위치를 알기 위해서는
현재 열려있는 파일(WorkBook)들의 이름과 각 파일이 메모리 어느 부분에 위치하고 있는 가 하는 정보를 담고 있는
목록(컬렉션:WorkBooks)이 필요하고 VBA 에서는 이 목록(컬렉션)에서 원하는 이름과 일치하는 파일(WorkBook)의
메모리상의 위치와 정보를 가져와 해당 WorkBook 에 접근하게 되는 것입니다.

새파일을 세번 선택해서 파일 3개가 열렸습니다. 
이때 3개의 파일에 대한 이름과 정보를 갖고 있는 리스트가 WorkBooks 컬렉션입니다
.


마찬가지로 선택된 WorkBook 내에 존재하는 WorkSheet 들에 관한 목록인 WorkSheets 컬렉션도
각 WorkBook 내에 존재하게 됩니다.

이 파일에는 6개의 시트가 존재합니다. 
이 6개의 시트에 대한 이름과 정보를 갖고 있는 리스트가 WorkSheets 컬렉션입니다
.


역시 특정 시트에 접근할 때에도 원하는 시트의 이름을 WorkSheets 컬렉션 목록에서 찾아
VBA 가 해당 시트에 접근할 수 있도록 하는 것입니다.

대게 이 컬렉션은 WorkSheet Object 에 많이 사용하게 되는데.
WorkBook 내에 새로운 시트를 추가할 경우에도 WorkBook 에 접근하는 것이 아니라
목록인 컬렉션 즉 WorkSheets 에 명령을 내려서 시트를 추가하게 됩니다.
마찬가지로 특정 시트를 삭제하거나 이동, 보이고 안보이고 등의 작업도 컬렉션인 WorkSheets 를 이용해서
작업을 수행하여야 합니다.

VBA 내에서의 대개의 작업은 이렇게 수행합니다.

1. 원하는 WorkBook (열려있는 다수의 파일 중 하나)을 WorkBooks 컬렉션에서 찾아 선택합니다.
2. 선택된 WorkBook 내의 원하는 WorkSheet (해당 파일내의 여러개의 시트)를 WorkSheets 컬렉션에서 찾아 선택합니다.
3. 선택된 WorkSheet Object 내의 데이터를 Range Object 를 이용해 참조, 수정 작업을 수행합니다.

자 위처럼 원하는 Object 는 Object 의 목록인 컬렉션에서 찾는 것입니다.
WorkSheet 가 WorkBook 내에 있는 하위 Object 라고 WorkSheet 를 WorkBook 에서 찾는 것이 아닙니다.
WorkSheet 는 WorkSheets 라는 컬렉션에서 찾아야 합니다.
'김개똥' 이라는 학생을 '학교'에서 찾는 것이 아니라 '학생부' 에서 찾는 것과 동일한 이치입니다.

새파일을 생성하거나 Excel 에서 불러오거나 닫거나 할 경우 자동으로 WorkBooks 컬렉션이 자동 갱신되며
WorkBook 내의 시트를 새로 생성 이동 삭제 등을 할 경우에 역시 WorkSheets 컬렉션이 자동 갱신됩니다.

Excel 에서는 그냥 사용자의 눈과 마우스로 원하는 작업을 할 수 있으나
VBA 에서는 원하는 Object 의 이름을 가지고 컬렉션과 함께 원하는 작업을 수행하게 됩니다.

VBA 에서는 컬렉선 Object 를 가지고 WorkSheet를 생성, 이동, 삭제, 변경을 할 수 있습니다.
즉 리스트인 컬렉션 목록에 뭔가 삽입하거나 위치를 이동시키거나 하는 방법을 사용하는 것입니다.

WorkSheet 는 시트의 정렬순서 (왼쪽부터 1 2 3 4 )를 이용해서 배열에 접근하는 식으로 선택할 수도 있습니다.
즉 이름으로 찾을 경우에는 WorkSheets("시트이름")  을 사용할 수도 있고
확실하게 해당 시트의 위치를 알 경우에는 WorkSheets(위치-숫자 1,2,3,4 등) 로 선택할 수도 있습니다.

뭐 말이 좀 섬찟하지 별거 아닙니다.
개념만 확 비끄러 매시면 아주 간단합니다.

덧글

  • fineraim 2012/10/23 17:38 # 삭제 답글

    vba가 뭔지 얀간은 알게 되었읍니다 감사합니다
    여기서 부터 좀 어렵네요 역쉬 ~~~ 난 초보 ㅎㅎ
댓글 입력 영역