범위를 다루는 또 다른 방법
ListObjet | 테이블
워크시트에서 테이블을 만들고 접근하려면 Range오브젝트로 모두 처리한다
그런데 ListObject라는 오브젝트도 엑셀에서 제공한다
실은 VBA로 Range오브젝트에 능숙하면 ListObject는 별 의미는 없이
Range오브젝트를 적절히 두들겨 만들면 된다
그러나..
2003버전에서 나타나서 2007에서 좀더 많은 기능이 추가되면서
Range오브젝트 만으로 테이블을 다루기 보다는
테이블만 별도로 다루는 오브젝트가 없을까..하여 만들어진것이
ListObject이다
ListObject가 갖고 있는 메소드와 속성을 활용하면 나름대로
또 다른 코딩의 즐거움도 있을 것이다
2003버전에서는 목록이라고 하였고..
2007버전에서는 테이블이라고 메뉴에 나타난다
그러나 모두 코드로 접근하는 오브젝트는 모두 ListObject이다
이 ListObject는 VSTO라는 visual basic studio에서 엑셀소루션을
만들때 많은 도움을 주는 녀석이기도 하다
엑셀시트에서의 작은 데이타베이스!! 라는 컨셉이기도 하다
아무튼 ListObject를 다루어 보도록 하자
워크시트에
지역 | 담당자 | 매출 |
동부 | 오징어 | 300 |
서부 | 꼴뚜기 | 500 |
남부 | 낙지 | 350 |
북부 | 문어 | 400 |
만약 위와같이 하고 만약 첫째행 열머리행을 찾아서
바탕색을 노랑색으로 하고 싶다면
Dim rTable As Range
Set rTable=Range("Table에지어준이름")
rTable.Rows(1).Interior.ColorIndex=6
와 같이 하면 될 것이다
그리고 또 테이블에 이름을 지어주던가 기준셀을 찾아서
CurrentRegion같은 속성을 써서 테이블을 찾은후
첫째행을 찾게 된다
그러나
ListObject를 활용한다면
Me.ListObjects(1).HeaderRowRange.Interior.ColorIndex = 6
와 같이 한 줄이면 된다
물론 그냥 Range오브젝트만을 활용해도
한줄로 처리도 되지만 절차의 단계가 좀더 걸친다
ListObject는 하나의 테이블을 하나의 별도의
오브젝트로 관리를 할 수 있는 것이다
Range오브젝트만 갖고 온갖일을 다 해온 VBA고수들은
그냥 Range오브젝트만 갖고 살아도 별 일 없다
그러나 제공하고 사용하라고 하는 오브젝트는
알고는 있어야 할 일이다
우노도 물론 그냥 Range오브젝트만 갖고 지지고 볶는다
하지만 알고 안하는 것과 모르고 안하는 것은 다르니까..
알도록 하자
우선 ListObject가 이해하는 테이블이 존재하여야 한다
아래의 그림과 같이 메뉴얼로 목록혹은 테이블(ListObject)을
지정하기도 하지만
또한 ListObject를 만든후
다시선택하여 메뉴에서 [범위로 변환]하면 다시 일반 범위로
돌아간다
VBA로 어떤 범위를 ListObject로 지정을 한후
해당 ListObject에 대한 다양한 작업을 할 수 있을 것이다
아래의 화일에서
1)일반범위를 ListObject로 만들어 보고
2)다시 ListObject를 일반 범위로 변환시켜보고
3)일반범위에서 테이블의 어떤 범위에 접근하기 절차가 까다로우면
실행중에 ListObject로 변환한후 목적하는 작업을 한후
다시 일반 범위로 변환시키는 것들을 해보도록 하자
ListObject_158_1.