programing

Excel 테이블에서 모든 데이터 행 삭제(첫 번째 행 제외)

newstyles 2023. 4. 24. 22:57

Excel 테이블에서 모든 데이터 행 삭제(첫 번째 행 제외)

최근 테이블 내의 모든 데이터 행을 삭제하려고 했습니다.첫 번째 데이터 행은 삭제만 하면 됩니다.

작업 중인 테이블 중 일부는 이미 행이 없을 수 있기 때문에 이 테이블을 사용하여 문제를 해결했습니다..DataBodyRange.Rows.Count행이 없는 테이블(헤더 및/또는 바닥글만)에서 오류가 발생합니다.

저는 모든 해결책을 찾았지만, 모든 해결책을 찾을 수 없었기 때문에, 이 질문에 대한 저의 답변이 앞으로 다른 사람들에게 도움이 되었으면 합니다.

데이터를 클리어하는 방법은 다음과 같습니다.

Sub Macro3()
    With Sheet1.ListObjects("Table1")
        If Not .DataBodyRange Is Nothing Then
            .DataBodyRange.Delete
        End If
    End With
End Sub

코드는 다음과 같이 압축할 수 있습니다.

Sub DeleteTableRows(ByRef Table As ListObject)
    On Error Resume Next
    '~~> Clear Header Row `IF` it exists
    Table.DataBodyRange.Rows(1).ClearContents
    '~~> Delete all the other rows `IF `they exist
    Table.DataBodyRange.Offset(1, 0).Resize(Table.DataBodyRange.Rows.Count - 1, _
    Table.DataBodyRange.Columns.Count).Rows.Delete
    On Error GoTo 0
End Sub

편집:

참고로 첫 번째 행 또는 다른 행이 삭제되었는지 여부를 사용자에게 알려야 할 경우 적절한 오류 처리를 추가합니다.

정상적으로 작동하는 루틴이 3개 있습니다. 테이블에서 셀을 선택하고 서브루틴 중 하나를 실행합니다.

Sub ClearTable()
If Not ActiveCell.ListObject Is Nothing Then
    ActiveCell.ListObject.DataBodyRange.Rows.ClearContents
End If
End Sub

및 테이블을 축소하여 헤더와 첫 번째 데이터 행을 제외한 데이터 바디 범위를 제거합니다.

Sub ShrinkTable()
If Not ActiveCell.ListObject Is Nothing Then
    ActiveCell.ListObject.DataBodyRange.Delete
End If
End Sub

테이블 삭제를 눌러 시트에서 테이블을 완전히 삭제합니다.

Sub DeleteTable()
If Not ActiveCell.ListObject Is Nothing Then
    ActiveCell.ListObject.Delete
End If
End Sub

저는 위의 코드로는 할 수 없는 공식을 유지하고 싶었습니다.

이렇게 하면 테이블에 빈 행이 하나 남습니다.

Sub DeleteTableRows(ByRef Table As ListObject, KeepFormulas as boolean)

On Error Resume Next

if not KeepFormulas then
    Table.DataBodyRange.clearcontents
end if

Table.DataBodyRange.Rows.Delete

On Error GoTo 0

End Sub

(PS는 이유를 묻지 않습니다!)

그냥 이걸 쓰고 있어요.

On Error Resume Next
Worksheets("Sheet1").ListObjects("Table1").DataBodyRange.Rows.Delete

첫 번째 줄은 모든 경우에 유지됩니다(물론 지워집니다).

이거 괜찮으세요?Excel 2010에서 테스트해 봤는데 정상적으로 동작합니다.이것은 A~G 열을 사용하는 "Table1"이라는 테이블에서 작동합니다.

Sub Clear_Table()
    Range("Table1").Select
    Application.DisplayAlerts = False
    Selection.Delete
    Application.DisplayAlerts = True
    Range("A1:G1").Select
    Selection.ClearContents
End Sub

이것.VBA Sub는 모든 데이터 행을 삭제합니다(첫 번째 행은 제외).이 행은 클리어 됩니다.

Sub DeleteTableRows(ByRef Table as ListObject)

        '** Work out the current number of rows in the table
        On Error Resume Next                    ' If there are no rows, then counting them will cause an error
        Dim Rows As Integer
        Rows = Table.DataBodyRange.Rows.Count   ' Cound the number of rows in the table
        If Err.Number <> 0 Then                 ' Check to see if there has been an error
            Rows = 0                            ' Set rows to 0, as the table is empty
            Err.Clear                           ' Clear the error
        End If
        On Error GoTo 0                         ' Reset the error handling

        '** Empty the table *'
        With Table
            If Rows > 0 Then ' Clear the first row
                .DataBodyRange.Rows(1).ClearContents
            End If
            If Rows > 1 Then ' Delete all the other rows
                .DataBodyRange.Offset(1, 0).Resize(.DataBodyRange.Rows.Count - 1, .DataBodyRange.Columns.Count).Rows.Delete
            End If
        End With

End Sub

먼저 내용을 클리어한 후 표 크기를 조정하는 것이 좋습니다.

Sub DeleteTableRows(ByRef Table As ListObject)

     Dim R               As Range

On Error Resume Next

    Table.DataBodyRange.ClearContents
    Set R = Table.Range.Rows(1).Resize(2)
    Table.Resize R

On Error GoTo 0

End Sub

위의 코드는 Excel 2010에서는 동작하지 않습니다.내 코드 아래에서는 원하는 시트 수를 확인한 후 테이블을 선택하고 행을 삭제할 수 있습니다.

Sub DeleteTableRows()
Dim table As ListObject
Dim SelectedCell As Range
Dim TableName As String
Dim ActiveTable As ListObject

'select ammount of sheets want to this to run
For i = 1 To 3
    Sheets(i).Select
    Range("A1").Select
    Set SelectedCell = ActiveCell
    Selection.AutoFilter

    'Determine if ActiveCell is inside a Table
    On Error GoTo NoTableSelected
    TableName = SelectedCell.ListObject.Name
    Set ActiveTable = ActiveSheet.ListObjects(TableName)
    On Error GoTo 0

    'Clear first Row
    ActiveTable.DataBodyRange.Rows(1).ClearContents
    'Delete all the other rows `IF `they exist
    On Error Resume Next
    ActiveTable.DataBodyRange.Offset(1, 0).Resize(ActiveTable.DataBodyRange.Rows.Count - 1, _
    ActiveTable.DataBodyRange.Columns.Count).Rows.Delete
    Selection.AutoFilter
    On Error GoTo 0
Next i
Exit Sub
'Error Handling
NoTableSelected:
  MsgBox "There is no Table currently selected!", vbCritical

End Sub

테이블 이름을 미리 알고 있다면 간단한 접근법입니다.

With [TableName].ListObject
    If Not .DataBodyRange Is Nothing Then: .DataBodyRange.Delete
End With

시트 참조 등이 필요 없습니다.

언급URL : https://stackoverflow.com/questions/20663491/delete-all-data-rows-from-an-excel-table-apart-from-the-first