12

表の列の空白セルを選択して行全体を削除するマクロを実行しようとしています。

以下のスクリプトは、次のエラーを表示する削除部分を除くすべてを実行します。

実行時エラー 1004 - 「Range クラスの削除メソッドに失敗しました」

次のコードを使用しました。

Sub test()
Range("Table1[[New]]").Activate
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.EntireRow.Delete
End Sub
4

7 に答える 7

12

いい質問です!テーブルなしでは.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
于 2012-10-20T10:04:03.293 に答える
2

実際には 1 回のパスで実行できますが、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
于 2012-10-20T14:03:56.223 に答える
1

ステップ 1: テーブルにヘルパー列を作成し、その行に空白のフィールドがないかどうかを確認します。たとえば、テーブルに A (価格)、B (数量)、および C (コスト) の 3 つの列がある場合、4 番目の列 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

これは基本的に、ヘルパー列を使用してテーブルで削除する行にフィルターをかけ、テーブル内のすべての可視データを選択し、テーブルのフィルターを解除します。テーブル内の表示されているすべての行を削除する方法を探していたところ、これを見つけて、これが機能することがわかるまでいじりました。それを取得してヘルパー列と組み合わせて、空白のあるすべての行を選択することも、あなたが望んでいたことのようです。

于 2015-05-01T17:57:43.387 に答える
0

以前の回答の適応:

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
于 2016-12-22T01:40:51.927 に答える