
아~~ 또 이상한 용어가 나옵니다.
컬렉션? 뭐 패션쇼를 연상하는 사람도 있겠고 수집품을 떠올리는 사람도 있겠습니다.
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 컬렉션입니다.
이때 3개의 파일에 대한 이름과 정보를 갖고 있는 리스트가 WorkBooks 컬렉션입니다.
마찬가지로 선택된 WorkBook 내에 존재하는 WorkSheet 들에 관한 목록인 WorkSheets 컬렉션도
각 WorkBook 내에 존재하게 됩니다.

이 파일에는 6개의 시트가 존재합니다.
이 6개의 시트에 대한 이름과 정보를 갖고 있는 리스트가 WorkSheets 컬렉션입니다.
이 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 등) 로 선택할 수도 있습니다.
뭐 말이 좀 섬찟하지 별거 아닙니다.
개념만 확 비끄러 매시면 아주 간단합니다.

덧글
여기서 부터 좀 어렵네요 역쉬 ~~~ 난 초보 ㅎㅎ