VBA 테이블과 ListObjects

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Younjung Kim

Last updated on 4월 1, 2023

이 튜토리얼에서는 VBA에서 테이블 및 ListObjects로 작업하는 방법을 보여드립니다.

VBA 테이블과 ListObjects

테이블은 Excel의 가장 유용하고 강력한 기능 중 하나이며, 이 튜토리얼에서는 VBA를 사용하여 테이블을 만들고, 테이블에 간단한 정렬을 추가하고, 테이블을 필터링하고, 기타 테이블 관련 작업을 수행하는 방법을 살펴 보겠습니다.

VBA로 테이블 만들기

ListObjects.Add 메서드는 워크시트의 범위를 기반으로 워크시트에 테이블을 추가할 수 있습니다. Sheet1 워크시트에 ($A$1:$B$8)에 표시된 범위가 있습니다.

Range in a Worksheet in Excel

다음 코드는 기본 테이블 스타일을 사용하여 ($A$1:$B$8) 범위를 기준으로 워크시트에 Table1 테이블을 추가합니다:

Sub CreateTableInExcel()

ActiveWorkbook.Sheets("Sheet1").ListObjects.Add(xlSrcRange, Range("$A$1:$B$8"), , xlYes).Name = _
"Table1"

End Sub

결과는 다음과 같습니다:

Table Created in VBA

VBA로 테이블 끝에 열 삽입하기

ListColumns.Add 메서드를 사용하여 테이블 끝에 열을 추가할 수 있습니다. 아래와 같이 Table1 테이블이 있습니다.

Table Created in VBA

다음 코드를 사용하여 테이블에 열을 추가할 수 있으며, 항상 테이블 끝에 열이 추가됩니다:

Sub AddColumnToTheEndOfTheTable()

ActiveWorkbook.Sheets("Sheet1").ListObjects("Table1").ListColumns.Add

End Sub

결과는 다음과 같습니다:

Adding a Column to a Table in Excel Using VBA

VBA를 사용하여 테이블 하단에 행 삽입하기

ListRows.Add 메서드를 사용하여 테이블 하단에 행을 추가할 수 있습니다. 아래와 같이 Table1 테이블이 있습니다.

Table Created in VBA

다음 코드는 항상 테이블 하단에 행을 추가합니다.

Sub AddRowToTheBottomOfTheTable()

ActiveSheet.ListObjects("Table1").ListRows.Add

End Sub

결과는 다음과 같습니다:

Adding a Row to the Bottom of the Table

VBA로 간단한 정렬 추가하기

VBA로 테이블을 정렬할 수 있습니다. 아래에 표시된 Table1 테이블은, VBA를 사용하여 Sales 열을 가장 낮은 순서에서 가장 높은 순서로 정렬할 수 있습니다.

Table Created in VBA

다음 코드는 Sales 열을 오름차순으로 정렬합니다.

Sub SimpleSortOnTheTable()

Range("Table1[[#Headers],[Sales]]").Select
ActiveWorkbook.Worksheets("Sheet1").ListObjects("Table1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").ListObjects("Table1").Sort.SortFields.Add _
Key:=Range("Table1[[#All],[Sales]]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal

With ActiveWorkbook.Worksheets("Sheet1").ListObjects("Table1").Sort

.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply

End With

End Sub

결과는 다음과 같습니다:

Sorting a Table Using VBA

VBA로 테이블 필터링하기

VBA를 사용하여 Excel 테이블을 필터링할 수도 있습니다. Table1 테이블이 있는데 1500보다 큰 매출만 표시되도록 테이블을 필터링할 경우 아래 예제를 참고해 주세요.

Table Created in VBA

5개의 선택적 매개 변수가 있는 자동 필터 방법을 사용할 수 있습니다. 두 번째 열인 Sales 열을 필터링하고 싶으므로 필드를 2로 설정하고 날짜와 숫자에 사용되는 xlAnd 연산자 매개 변수를 사용합니다.

Sub SimpleFilter()

 ActiveWorkbook.Sheets("Sheet1").ListObjects("Table1").Range.AutoFilter Field:=2, Criteria1:= _
 ">1500", Operator:=xlAnd

End Sub

결과는 다음과 같습니다:

Add a Filter to a Table

VBA의 ShowAllData 메서드로 필터 지우기

워크시트 클래스의 ShowAllData 메서드에 액세스하여 필터를 지울 수 있습니다. 테이블의 필터를 지우려는 경우 먼저 테이블에서 셀을 선택해야 하며, 이는 VBA에서 수행할 수 있습니다.

워크시트에 필터가 적용되었는지 확인하기 위해 조건부 논리를 사용하지 않으면 ShowAllData 메서드가 오류를 생성합니다. 다음 코드는 이를 수행하는 방법을 보여줍니다:

Sub ClearingTheFilter()

Range("Table1[[#Headers],[Sales]]").Select
If ActiveWorkbook.Worksheets("Sheet1").FilterMode = True Then
ActiveSheet.ShowAllData

End If

End Sub

Excel 테이블에서 모든 필터 지우기

테이블에서 셀을 먼저 선택하지 않고도 ListObject 클래스의 ShowAllData 메서드에 액세스할 수 있습니다. 다음 코드는 이를 수행하는 방법을 보여줍니다:

Sub ClearAllTableFilters()
ActiveWorkbook.Worksheets("Sheet1").ListObjects("Table1").AutoFilter.ShowAllData
End Sub

VBA로 행 삭제하기

ListRows.Delete 메서드를 사용하여 테이블의 데이터 본문에서 행을 삭제할 수 있습니다. 행 번호를 사용하여 어떤 행을 삭제할지 지정해야 합니다. 아래와 같이 Table1 테이블이 있습니다.

Table Created in VBA

테이블의 데이터 본문에서 두 번째 행을 삭제하고 싶을 경우 다음 코드를 사용하면 삭제할 수 있습니다:

Sub DeleteARow()

ActiveWorkbook.Worksheets("Sheet1").ListObjects("Table1").ListRows(2).Delete

End Sub

결과는 다음과 같습니다:

Deleting a Row Using VBA

VBA로 열 삭제하기

ListColumns.Delete 메서드를 사용하여 테이블에서 열을 삭제할 수 있습니다. 아래와 같이  Table1 테이블이 있습니다:

Table Created in VBA

첫 번째 열을 삭제하려면 다음 코드를 사용합니다:

Sub DeleteAColumn()

ActiveWorkbook.Worksheets("Sheet1").ListObjects("Table1").ListColumns(1).Delete

End Sub

결과는 다음과 같습니다:

Delete a Column with VBA

VBA에서 테이블을 다시 일반 셀로 변환하기

VBA를 사용하여 테이블을 일반 셀로 다시 변환할 수 있습니다. 다음 코드는 Table1 테이블을 셀로 다시 변환하는 방법을 보여줍니다:

Sub ConvertingATableBackToANormalRange()

ActiveWorkbook.Sheets("Sheet1").ListObjects("Table1").Unlist

End Sub

VBA를 사용하여 워크시트의 모든 테이블에 줄무니 열 추가 및 서식 지정

ListObjects 컬렉션을 사용하여 워크시트의 모든 테이블에 액세스할 수 있습니다. 아래 시트에는 두 개의 테이블이 있으며 VBA를 사용하여 두 테이블에 한 번에 줄무니 열을 추가하고 두 테이블의 데이터 섹션 글꼴을 굵게 변경하고 싶다면 아래 예제를 참고해 주세요.

Two Tables in Excel on the Same Worksheet

Sub AddingBandedColumns()

Dim tbl As ListObject
Dim sht As Worksheet

Set sht = ThisWorkbook.ActiveSheet

For Each tbl In sht.ListObjects
tbl.ShowTableStyleColumnStripes = True
tbl.DataBodyRange.Font.Bold = True
Next tbl

End Sub

결과는 다음과 같습니다:

Adding Banded Columns And Changing The Font of The Table to Bold

DoCmd.RunSQL을 사용하여 Access VBA에서 테이블 만들기

VBA에서 Access에서 테이블을 만드는 주요 방법 중 하나는 DoCmd.RunSQL 메서드를 사용하여 SQL 문으로 작업 쿼리를 실행하는 것입니다.

샘플 양식에 버튼이 있고 이 버튼을 클릭하면 두 개의 필드(또는 열)가 있는 ProductsTable 테이블을 만들고자 하는데, 하나는 ProductsID라는 기본 키 필드이고 다른 하나는 Sales라는 필드입니다.

Create the Products Table in Access

이 테이블을 생성하기 위해 다음 코드를 사용합니다:

Private Sub cmdCreateProductsTable_Click()

DoCmd.RunSQL "CREATE TABLE ProductsTable " _
& "(ProductID INTEGER PRIMARY KEY, Sales Integer);"

End Sub

결과는 다음과 같습니다:

Create a Table in Access VBA

VBA를 사용하여 Access에서 테이블 필터링하기

DoCmd.ApplyFilter 메서드를 사용하여 Access에서 테이블을 필터링할 수도 있습니다. 아래에는 Access에 ProductsTable로 이름지어진 간단한 테이블이 있습니다.

폼에서 이 버튼을 누르면 1500보다 큰 매출만 표시하려고 합니다.

Filtering a Table in Access

다음 코드를 사용하여 이를 수행할 수 있습니다:

Private Sub cmdFilter_Click()

DoCmd.OpenTable "ProductsTable"

DoCmd.ApplyFilter , "[Sales]>1500"

End Sub

결과는 다음과 같습니다:

Filtered Access Table

vba-free-addin

VBA 코드 예시 추가 기능

본 웹사이트에 있는 모든 코드 예시에 쉽게 접근해보세요.

메뉴로 이동하여 클릭만 하면 코드는 모듈에 바로 입력됩니다. .xlam 추가 기능.

(설치가 필요 없습니다!)

무료 다운로드

VBA 코드 예시로 돌아가기