테이블의 빈 행 제거
표 열에서 빈 셀을 선택하고 행 전체를 삭제하는 매크로를 실행하려고 합니다.
아래 스크립트는 삭제 부분을 제외한 모든 작업을 수행하므로 다음 오류가 나타납니다.
런타임 오류 1004 - "범위 클래스의 삭제 메서드 실패"
저는 다음 코드를 사용했습니다.
Sub test()
Range("Table1[[New]]").Activate
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete
End Sub
좋은 질문입니다!테이블이 없으면,.EntireRow.Delete항상 작동하지만 테이블 안에서는 그렇지 않은 것처럼 보입니다.
작동 내용:
Sub Test()
  Dim Rng As Range
  On Error Resume Next
  Set Rng = Range("Table1[[New]]").SpecialCells(xlCellTypeBlanks)
  On Error Goto 0
  If Not Rng Is Nothing Then
    Rng.Delete Shift:=xlUp
  End If
End Sub
실제로 원패스로 할 수 있지만 사용해야 합니다.ListObject물건과 그 물건DataBodyRange그리고.ListColumns속성:
Sub ClearBlankCellsInColumnNew()
Dim rngBlanks As Excel.Range
With Worksheets("Sheet1").ListObjects("Table1")
    On Error Resume Next
    Set rngBlanks = Intersect(.DataBodyRange, .ListColumns("New").Range).SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0
    If Not rngBlanks Is Nothing Then
        rngBlanks.Delete
    End If
End With
End Sub
1단계: 표에서 해당 행의 빈 필드를 확인할 수 있는 도우미 열을 만듭니다.예를 들어, 표에 A(가격), B(수량), C(비용) 열이 3개 있는 경우 네 번째 열 D를 추가하고 "공백이 있습니까?"라고 레이블을 지정합니다.등식은=IF(OR(ISBLANK([@Price]),ISBLANK([@Quantity]),ISBLANK([@Cost])),"Yes","No")
그러면 모든 빈칸을 볼 수 있도록 필터링할 열이 제공됩니다.
2단계: 그런 다음 VBA에서 다음 작업을 수행합니다.
Range("MyTableNameHere").AutoFilter Field:=Range("MyTableNameHere[Any Blanks?]").Column, Criteria1:="Yes"
Application.DisplayAlerts = False
Range("MyTableNameHere").ListObject.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
Range("MyTableNameHere").AutoFilter Field:=Range("MyTableNameHere[Any Blanks?]").Column
 
이 작업은 기본적으로 도우미 열을 사용하여 테이블에서 삭제할 행으로 필터링하고, 테이블에서 볼 수 있는 모든 데이터를 선택한 후 테이블 필터링을 해제합니다.저는 표에서 보이는 행을 모두 삭제하는 방법을 찾고 있었는데, 이것을 발견하고 이것이 효과가 있다는 것을 알 때까지 만지작거렸습니다.그것을 가져다가 도우미 열과 결합하여 빈칸이 있는 모든 행을 선택하는 것도 당신이 원했던 것 같습니다.
이전 답변 적용:
On Error Resume Next
Set Rng = ListObjects(1).DataBodyRange.SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
If Not Rng Is Nothing Then
Rng.Delete Shift:=xlUp
End If
이 한 대의 라이너 또한 도움이 될 것입니다.
on error resume next ' 테이블에 빈 행이 없으면 매크로를 계속합니다.범위("표 1").열(1).특수 셀(xlCellTypeBlanks).행 전체.삭제
'빈칸을 확인하기 위해 1번째 열을 참조하여 비어있는 삭제' 코드를 쉽게 조작할 수 있도록 표에 사용자 지정 이름을 사용합니다.
Excel에서 ListObjects를 사용하면 빈 행을 쉽게 제거할 수 있습니다.
Sub RemoveBlankRow(ByVal SheetName As String, TableName As String)
Dim rng As Integer
rng = Sheets(SheetName).ListObjects(TableName).DataBodyRange.Rows.Count
For i = 1 To rng
    If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then Rows(i).EntireRow.Delete
Next
End Sub
프레이 린드스트롬의 해결책에 관한 두 가지 노트를 사용했지만 약간 수정해야 했습니다.
(1) 다음 앞에 끝 이프 추가
(2) 종료 If 바로 앞에 "i = i - 1"을 추가합니다.
Why?공백 행이 하나씩 위에 있으면 모든 행의 숫자가 하나씩 위로 이동했기 때문에 하나를 건너뛸 수 있기 때문입니다.기본적으로, 만약 당신이 삭제했다면row [N]또 , .row [N] 바로 . 바로 다음으로 이동하는 것보다.row [N + 1].
마지막 행이 비어 있으면 루프가 고착됩니다.그래도 아마 IF를 넣어서 처리할 겁니다.
이것이 오래된 스레드라는 것을 알고 있지만, 다른 사람이 유사한 솔루션을 찾을 경우를 대비하여 이를 추가하려고 생각했습니다.프레즈에게 감사드립니다. 당신의 코드가 정말 도움이 되었습니다!
이것이 제 해결책입니다.
Public Sub remove_blank_rows(sh As Worksheet)
    Dim tbl As ListObject
    Set tbl = sh.ListObjects(1)
    Dim i As Long
    Dim ii As Long
    
    Application.EnableEvents = False
    
    ii = tbl.Range.rows.Count
    For i = 2 To ii
        If WorksheetFunction.CountA(rows(i)) = 0 Then
            
            rows(i).EntireRow.Delete
            
            ii = tbl.Range.rows.Count
            If i >= ii Then
                GoTo A
            End If
            
            If i > 1 Then
                i = i - 1
            End If
    
        End If
    Next
A:
    
    Application.EnableEvents = True
End Sub
 
이 1만큼  이 1이 됩니다.i는 다음 반복에서 동일한 행을 다시 확인하기 위해 감소됩니다!할 점은i두다로 됩니다.If
언급URL : https://stackoverflow.com/questions/12986520/remove-blank-rows-in-table
'programing' 카테고리의 다른 글
| powershell이 있는 파일 이름의 각 단어 첫 글자 대문자화 (0) | 2023.10.16 | 
|---|---|
| 수동으로 시퀀스 전달 - oracle sql (0) | 2023.10.16 | 
| ASP에서 HTML을 생성하는 현재 최고의 솔루션은 무엇입니까?콘솔 애플리케이션 내의 NET 레이저 템플릿? (0) | 2023.10.16 | 
| jquery mobile collapsable and galaxy tab 10.1 json 응답으로 무작위 응답 제공 (0) | 2023.10.11 | 
| 내 Android 장치가 adb 장치 목록에 나타나지 않는 경우 (0) | 2023.10.11 |