[EXCEL] 좁히고 있는 테이블을 행 삭제하려고 하면 런타임 오류 1004가 나왔으므로 대책
하고 싶은 일
테이블을 필터링하여 표시된 레코드를 삭제합니다.
이것을 VBA에서 실행한다.
■ 샘플 테이블
이 테이블을 스즈키로 좁히고 행 삭제하고 싶다.
했던 일
아래 코드를 실행해 보았다. ※오류 처리는 제외하고 있습니다.
샘플
Sub sample()
Dim tb As ListObject
Set tb = ListObjects("テーブル1")
tb.Range.AutoFilter Field:=2, Criteria1:="鈴木"
tb.DataBodyRange.SpecialCells(xlCellTypeVisible).EntireRow.Delete
End Sub
그런데, Delete시에 1004 런타임 에러가 발생하는 경우가 있었다.
발생하는 조건을 조사한 결과, 스즈키로 좁혀 실행하면 에러가 나오고, 사토에서 좁혀 실행하면 에러가 나오지 않는 것을 알았기 때문에 거기에서 원인을 찾았다.
원인(아마)
삭제할 범위가 떨어져 있으면 오류가 나오는 것 같습니다.
tb.DataBodyRange.SpecialCells(xlCellTypeVisible).EntireRow
의 Address를 보면 스즈키의 경우는 "$2:$2,$4:$4,$7:$7"
가 되어 있었다.사토의 경우는
"$5:$6"
가 되어 있었다.손으로 행 삭제할 때에도 이 거동을 볼 수 있으므로 그런 일일 것이라고 해석.
↓ 스즈키의 행을 복수 선택하면 삭제할 수 없다.
↓사토의 행을 정리해 복수 선택하면 삭제할 수 있다.
대응
행을 지정하면 실패하지만 셀을 선택하면 범위가 멀어져도 삭제할 수 있는 것 같다.
↓ 스즈키의 셀만 선택.
그래서 셀 선택으로하기 위해 EntireRow를 제외.
또 「행 전체를 삭제합니까?」라고 하는 다이얼로그가 나오므로 표시되지 않게 전후로 Application.DisplayAlerts를 변경시킨다.
이것으로 침착했다.
샘플
Sub sample()
Dim tb As ListObject
Set tb = ListObjects("テーブル1")
tb.Range.AutoFilter Field:=2, Criteria1:="鈴木"
Application.DisplayAlerts = False
tb.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
End Sub
Reference
이 문제에 관하여([EXCEL] 좁히고 있는 테이블을 행 삭제하려고 하면 런타임 오류 1004가 나왔으므로 대책), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tomikiya/items/d0d9f19221b8dcd93192텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)