12

そのため、 for each ループを使用して一連の行を処理していました。行を削除していて行がスキップされるという問題が発生したため、do while ループに変更しました。

私が抱えている問題は、「セル」オブジェクトを取得しようとしていることです。私が持っていた前に:

For Each C In Worksheets("Blah").Range("A2:A" & lastRow).Cells

私は次のようなことができます

C.Offset(1, 0)
C.Value = "Troy"

など、私は使ってみました:

C = Worksheets("Blah").Cells(iRow, 2)

しかし、それはCにセルの値を与えるだけです。実際のセル オブジェクトを取得するにはどうすればよいですか?

ありがとう

4

2 に答える 2

19

行を削除するときは、常に下から順に行うのが最善です。特定の問題は、C を範囲値に「Let」するのではなく、C を範囲オブジェクトに設定する Set キーワードが必要なことです。Range にはデフォルトのプロパティである Value があり、プロパティを省略すると、それが使用されるプロパティになります。そのため、オブジェクト変数を割り当てるときは Set を使用する必要があります。以下は、逆方向にループして行を削除し、オブジェクト変数を割り当てる例です。

Sub DeleteRows()

    Dim i As Long
    Dim rRng As Range
    Dim rCell As Range

    Set rRng = Sheet1.Range("A1:A9")

    For i = rRng.Rows.Count To 1 Step -1
        Set rCell = rRng.Cells(i, 1)
        If rCell.Value Mod 2 = 1 Then
            rCell.EntireRow.Delete
        End If
    Next i

End Sub
于 2012-08-13T21:23:34.400 に答える
1

値自体ではなくオブジェクト参照を取得するには、「Set」を使用する必要があります

Set C = Worksheets("Blah").Cells(iRow, 2)
于 2019-02-25T17:54:23.543 に答える