あなたが値に基づいて、ワークシート内の行を削除したい場合は、次のようなコードはそれを行うだろう...
Sub DeleteRows()
Dim aRange As Range, aRow As Range, aCell As Range
Set aRange = Range("A1:E5")
For Each aRow In aRange.Rows
For Each aCell In aRow.Cells
If aCell.Value = "Somestring" Then
aRow.EntireRow.Delete
Exit For
End If
Next aCell
Next aRow
End Sub
あなたは、オブジェクトがあるという範囲を変更したい場合値に基づいて、VBAで参照し、その後、次のようなコードはそれを行うだろう...
Sub DeleteRowsInObject()
Dim aRange As Range, aRow As Range, aCell As Range
Dim bRange As Range, found As Boolean
Set aRange = Range("A1:E5")
For Each aRow In aRange.Rows
found = False
For Each aCell In aRow.Cells
If aCell.Value = "Somestring" Then found = True
Next aCell
If Not found Then
If bRange Is Nothing Then
Set bRange = aRow
Else
Set bRange = Union(bRange, aRow)
End If
End If
Next aRow
Set aRange = bRange
Set bRange = Nothing
End Sub
あなたは、それはいくつかのように行/列だと非連続的であり、Rangeオブジェクトに注意する必要があります通常のプロパティ/メソッドは必ずしも期待する値を提供するとは限りません。
範囲は複数の非連続セクションに分割されますか?スプレーシートのように上にシフトしている細胞を模倣する方法はありますか? –
@Srick - 'debug.print aRange.address'をルーチンの最後に追加すると、aRangeがどのように"分割 "するのかがわかります。あなたが達成しようとしているものによっては、Variant型の配列を使うほうが良いでしょう。 – OldUgly
これで範囲値をループして配列に格納します。私はいくつかのワークブックから1つのマスターブックに範囲を移動しようとしていますが、ソースブックの特定のユーザー入力がプロシージャのバグを起こしていることがわかりました。ご協力いただきありがとうございます ! –