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
'programing' 카테고리의 다른 글
Postgre를 사용하여 동일한 쿼리의 여러 행 업데이트SQL (0) | 2023.04.24 |
---|---|
java.displaces를 클릭합니다.ClassNotFoundException: com.sun.jersey.spi.container.servlet.서블릿 컨테이너 (0) | 2023.04.24 |
Web.config 변환을 사용하여 appSettings 섹션에서 속성 값을 변경하는 방법 (0) | 2023.04.24 |
Windows Azure 웹 사이트 청소 (0) | 2023.04.24 |
문자열에서 숫자 찾기 및 추출 (0) | 2023.04.24 |