1

Union後で削除する必要があるデータと特定の行番号をループしようとしています。以下のコードは正しい行を保存しますが、削除できません。データがテーブルにない場合は目的の行を削除できるため、データがテーブルに配置されているためだと思います。'run time error 1004 - delete method of range class failed'行にエラー メッセージが表示されますUrng.delete

Sub DeleteRows()
Dim ws4 As Worksheet: Set ws4 = Worksheets("Sheet1") 
Dim LastRow As Long 
Dim CurrentRow As Long
Dim GroupValue
Dim GroupTotal As Long
Dim x As Long
Dim Urng As Range

Application.ScreenUpdating = False
ws4.Activate

GroupValue = ws4.Range("B6").Value
CurrentRow = 6     LastRow = ws4.Cells(Rows.Count, "B").End(xlUp).Row
Set Urng = Rows(LastRow + 1)

    For x = 1 To LastRow 
        GroupTotal = Application.WorksheetFunction.CountIf(Range("B6:B" & LastRow), GroupValue)
        If GroupTotal = 1 Then
            Set Urng = Union(Urng, Rows(CurrentRow))
        End If

        CurrentRow = CurrentRow + GroupTotal
        GroupValue = Range("B" & CurrentRow).Value     
        If GroupValue = "" Then ' 
            Exit For
        End If

    Next x

Urng.Delete
Application.ScreenUpdating = True
End Sub

運悪く使ってみました.EntireRow.Delete

Unionsテーブルの外にはデータがないので、テーブルの行だけを削除することで解決できるかもしれませんが、 で行番号を使用できない場合、行番号のループを構築する方法がわかりませんUnion(Urng, Rows(CurrentRow))

行の一部がテーブルである複数の行全体を削除する VBA ソリューションはありますか?

4

1 に答える 1

1

という名前のテーブルから行番号 5 を削除する方法は次のとおりTableNameです。

Sub TestMe()
    Range("TableName[#All]").ListObject.ListRows(5).Delete
End Sub

特定の問題に関してはUrng、テーブルの内外にある行がある場合があります。したがって、 で削除することはできません.Delete。自分自身を見る前にこれを書いUrng.Deleteてください:

Urng.Select
Stop
Unrg.Delete

6サンプルでは、​​行がテーブル内にあり、行18がテーブルの外にあることがわかります。

ここに画像の説明を入力


テーブル内で近接していない 2 つの行の削除については、ループするしかないと思います。確かに少し遅いですが、動作します:

Sub TestMe()

    Dim cnt As Long
    Dim arrRows As Variant: arrRows = Array(10, 12)
    Dim table As ListObject: Set table = ActiveSheet.ListObjects("SomeTable")

    For cnt = UBound(arrRows) To LBound(arrRows) Step -1
        table.ListRows(arrRows(cnt)).Delete
    Next cnt

    'This works only when the rows are after each other, e.g. 2,3,4
    table.Range.Rows("2:4").Select
    Stop
    table.Range.Rows("2:4").Delete

End Sub
于 2018-06-04T09:22:44.537 に答える