Home » Excel VBA Rangeオブジェクト » 行・列を表すRange » For Eachで行ごとに処理するには

For Eachで行ごとに処理するには

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2007 ビルド13029.20344 Microsoft Store)

「vba for each range 行ごと」
という検索キーワードで、このサイト『インストラクターのネタ帳』へアクセスがありました。

Excel VBAのFor Each~Next文を使って、行ごと・行単位でループ処理を行うには、どのようなコードを書けばいいのかを探していらしたのでしょう。

[スポンサードリンク]

どのような処理を行いたいのかが、このキーワードだけでは不明ですから、参考になりそうなシンプルなコードをご紹介しておきます。

For Each~Next文で行ごとに処理するサンプル

以下のSubプロシージャが参考になるでしょう。

Sub ForEach文で行ごとに処理する()
 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文で書くと以下のとおりです。

Sub For文で行ごとに処理する()
 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

[スポンサードリンク]

Home » Excel VBA Rangeオブジェクト » 行・列を表すRange » For Eachで行ごとに処理するには

「行・列を表すRange」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.