「vba for each range 行ごと」
という検索キーワードで、このサイト『インストラクターのネタ帳』へアクセスがありました。
Excel VBAのFor Each~Next文を使って、行ごと・行単位でループ処理を行うには、どのようなコードを書けばいいのかを探していらしたのでしょう。
どのような処理を行いたいのかが、このキーワードだけでは不明ですから、参考になりそうなシンプルなコードをご紹介しておきます。
For Each~Next文で行ごとに処理するサンプル
以下のSubプロシージャが参考になるでしょう。
Dim rng As Range
For Each rng in Range("A1:C3").Rows
rng.Select
Debug.Print rng.Address(False, False)
Next
End Sub
上記のSubプロシージャを、拙著『いちばんやさしいPowerPoint VBAの教本でも多用しているショートカットキー[F8]でステップ実行してください。
アクティブなワークシートの、
1行目(A1:C1セル)
2行目(A2:C2セル)
3行目(A3:C3セル)
が順番に選択され、セル番地がイミディエイトウィンドウに出力されます。
Range.Rowsで行を表すRangeを取得
ポイントはRowsプロパティです。Rangeオブジェクトに用意されているRowsプロパティで、
For Each rng in Range("A1:C3").Rows
行を表すRangeオブジェクトを取得しています。
もしもRange.Rowsプロパティを使わない、
For Each rng in Range("A1:C3")
rng.Select
Debug.Print rng.Address(False, False)
とした場合は、
A1・B1・C1
A2・B2・C2
A3・B3・C3
の各セルが順番に選択され、個々のセル番地が出力されます。
「Range("A1:C3").Rows」と指定した場合は行を単独のオブジェクトとして含むRangeコレクションが、Range.Rowsプロパティのない「Range("A1:C3")」と指定した場合は個々のセルを単独のセルとして含むRangeコレクションが、それぞれ取得できるわけです。
For~Next文で行ごとに処理するサンプル
ちなみに、先のSubプロシージャをFor~Next文で書くと以下のとおりです。
With Range("A1:C3").Rows
Dim i As Long
For i = 1 To .Count
.Item(i).Select
Debug.Print .Item(i).Address(False, False)
Next
End With
End Sub
この書き方をすると、拙著『いちばんやさしいExcel VBAの教本』で言及している、コレクションのCountプロパティと、
With Range("A1:C3").Rows
Dim i As Long
For i = 1 To .Count
Itemプロパティを
.Item(i).Select
Debug.Print .Item(i).Address(False, False)
明記する必要があります。
最終更新日時:2020-09-03 03:43
- Newer:Word VBAでカーソルを行頭に移動する
- Older:Pythonのinput関数の戻り値は文字列
Home » Excel VBA Rangeオブジェクト » 行・列を表すRange » For Eachで行ごとに処理するには