본문 바로가기
ListObject object

ListObject.DataBodyRange property

2024. 3. 2.

ListObject.DataBodyRange 속성

표에서 머리글 행을 제외한 값 범위를 나타내는 Range 개체를 반환하며 읽기 전용입니다.

Syntax
expression.DataBodyRange

expression : ListObject 개체를 나타내는 변수입니다.

예제 1 : 표의 데이터 범위 크기 확인

Sub CheckDataBodyRangeSize()
    Dim ws As Worksheet
    Dim tbl As ListObject
    Dim dataRange As Range
    
    Set ws = ThisWorkbook.Sheets("Books")
    Set tbl = ws.ListObjects("Book")
    
    Set dataRange = tbl.DataBodyRange
    
    MsgBox "표의 데이터 범위 크기: " & dataRange.Rows.Count & " 행, " & dataRange.Columns.Count & " 열"
End Sub

예제 2 : 표의 데이터 범위 출력

Sub GetListDataBodyRangeAddress()
' 시트와 표의 이름 지정
    Dim sheetName As String
    Dim tableName As String
    sheetName = "Sheet1"
    tableName = "Product"

    ' 시트 존재 여부 확인
    Dim ws As Worksheet
    Set ws = GetSheetByName(sheetName)
    If ws Is Nothing Then
        MsgBox "시트 '" & sheetName & "'이(가) 존재하지 않습니다."
        Exit Sub
    End If

    ' 표 찾기
    Dim tbl As ListObject
    Set tbl = GetTableByName(ws, tableName)

    ' 표가 있는지 확인 후 주소 출력
    If Not tbl Is Nothing Then
        MsgBox "ListObject.DataBodyRange 주소: " & tbl.DataBodyRange.Address
    Else
        MsgBox "표 '" & tableName & "'이(가) '" & sheetName & "' 시트에 존재하지 않습니다."
    End If
End Sub

Function GetSheetByName(sheetName As String) As Worksheet
    On Error Resume Next
    Set GetSheetByName = ThisWorkbook.Sheets(sheetName)
    On Error GoTo 0
End Function

Function GetTableByName(ws As Worksheet, tableName As String) As ListObject
    On Error Resume Next
    Set GetTableByName = ws.ListObjects(tableName)
    On Error GoTo 0
End Function

매크로 실행 후

예제 3 : 표 사이즈 조정하기

Sub ResizeTable()
    ' 시트와 표의 이름 지정
    Dim sheetName As String
    Dim tableName As String
    sheetName = "Sheet1"
    tableName = "Product"
    
    ' 시트 존재 여부 확인
    Dim ws As Worksheet
    Set ws = GetSheetByName(sheetName)
    If ws Is Nothing Then
        MsgBox "시트 '" & sheetName & "'이(가) 존재하지 않습니다."
        Exit Sub
    End If
    
    ' 테이블 찾기
    Dim tbl As ListObject
    Set tbl = GetTableByName(ws, tableName)
    
    ' 테이블이 있는지 확인 후 크기 조정
    If Not tbl Is Nothing Then
        ' 목표 범위의 주소를 지정하여 테이블 크기 조정
        Dim targetRange As Range
        Set targetRange = ws.Range("A1").Resize(tbl.ListRows.Count + 10, tbl.ListColumns.Count + 5)
        tbl.Resize targetRange
        MsgBox "테이블의 크기가 조정되었습니다."
    Else
        MsgBox "테이블 '" & tableName & "'이(가) '" & sheetName & "' 시트에 존재하지 않습니다."
    End If
End Sub

Function GetSheetByName(sheetName As String) As Worksheet
    On Error Resume Next
    Set GetSheetByName = ThisWorkbook.Sheets(sheetName)
    On Error GoTo 0
End Function

Function GetTableByName(ws As Worksheet, tableName As String) As ListObject
    On Error Resume Next
    Set GetTableByName = ws.ListObjects(tableName)
    On Error GoTo 0
End Function

'ListObject object' 카테고리의 다른 글

ListObject.ShowAutoFilter property  (0) 2024.03.03
ListObject.ListRows property  (0) 2024.03.03
ListObject.ListColumns property  (0) 2024.03.03
ListObject.HeaderRowRange property  (0) 2024.03.03
ListObject.AutoFilter property  (0) 2024.03.02