[VBA 매크로] ListObject 객체로 엑셀 테이블 다루기
엑셀, VBA, 파워쿼리/VBA 매크로

[VBA 매크로] ListObject 객체로 엑셀 테이블 다루기

by Jongg 2024. 2. 24.
728x90

 

ListObject는 Excel VBA에서 사용되는 객체로, 테이블 형식의 데이터를 다루고자 할 때 ListObject 객체를 사용하면 편리하고 효율적으로 작업할 수 있습니다. 이번 글에서는 테이블을 ListObject로 선언하는 방법, 유용한 ListObject의 속성들, 그리고 Range 객체와 비교했을 때 ListObject의 장단점에 대해 알아보겠습니다. 

 

#1. ListObject 선언하기

▲ 위의 사진처럼 '예시테이블'이라는 테이블을 ListObject로 선언하겠습니다.

Sub 테이블다루기()

Dim tbl As ListObject  'tbl이라는 변수를 ListObject로 선언
Set tbl = Sheets(1).ListObjects("예시테이블")  '첫번째 시트에 있는 "예시테이블"이라는 Listobject를 tbl로 지정

End Sub

▲ 테이블을 ListObject로 선언하는 구문은 생각보다 단순합니다. 

 

#2. ListObject 속성

 

ListObject로 테이블 데이터를 다룰 때 유용한 속성들을 소개하겠습니다.

▲ 1) .Name: 테이블의 이름을 나타냅니다.

▲ 2) .Range: 테이블이 차지하는 범위를 나타냅니다.

 

▲ 3) .ListColumns: 테이블의 열들을 의미합니다. ListColumns(열의 순번) 혹은 ListColumns("열이름")으로 테이블의 특정 열을 반환할 수 있습니다.  

 

▲ 4) .ListRows: 테이블의 행들을 의미합니다.

 

▲ 5) .DataBodyRange: 테이블의 데이터 영역(제목행 제외)을 의미합니다.

tbl.ListColumns(2).DataBodyRange(2) 코드는 tbl 테이블의 두번째 열의 두번째 데이터를 의미하며, 예시테이블 상 '나'를 뜻합니다.

 

▲ 6) .HeaderRowRange: 제목행을 뜻합니다. 

 

#3. ListObject의 장단점 (Range와 비교)

 

ListObject는 Range와 비교해서 아래와 같은 장단점이 있습니다.

1) 장점

- ListObject는 ListObjects("표이름").ListColumns("열 이름") 방식으로 코드를 작성하면, 테이블의 열 이름을 직접 참조할 수 있어서 더 직관적입니다.

- 행 추가, 열 추가 시 테이블의 크기가 자동적으로 조정되므로, 데이터 범위가 변경되어도 코드를 수정할 필요가 없습니다.

반면, Range("A1:B4")이런 식으로 코드를 작성하면 데이터 범위가 변경될 때마다 코드를 수정해야합니다. CurrentRegion 속성을 사용할 시 이 문제를 어느정도 해결할 수 있는데, 이는 다른 글에서 소개하겠습니다. 

 

2) 단점

- 테이블 이름이 필요하기 때문에 초기 설정이 복잡할 수 있습니다.

따라서 간단하게 사용할 매크로를 코딩할 때는 Range를 사용하는 것이 더 편리할 수도 있습니다.

 

 

 

 

 

728x90

댓글