Home » ExcelVBA Rangeオブジェクト » For文でRangeを処理するExcelマクロ

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

For文でRangeを処理するExcelマクロ

「excel マクロ for文 range」
「excel vba for文 range」
「excel vb2010 for文 range」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。

Excel VBA(Visual Basic for Applications)のFor~Nextループで、Rangeオブジェクトを処理するには、どのようなコードを書けばいいのかを探している方による検索でしょうか。

[スポンサードリンク]

RangeにFor Each~Nextループを回す

「for文」ということですが、まずはFor Each~Nextループで処理するExcelマクロを確認しておきましょう。

Sub RangeをForEach文で処理する()
 Dim rng As Range

 For Each rng In Range("A1:B3")
  MsgBox rng.Address(False, False)
 Next rng
End Sub

上記のマクロを実行すると、A1:B3セルのアドレスが、
  A1
  B1
  A2
  B2
  A3
  B3
とアルファベットの「z」を書くような順で、メッセージボックスに表示されます。

RangeにFor~Nextループを回す

で、本題のFor~Next文です。

先のマクロで登場したFor Each~Nextループを、For~Nextループで書くと以下のとおりです(通常For Each~Nextは、For~Nextでも書けるものです)。

Sub RangeをFor文で処理する()
 Dim i As Long

 With Range("A1:B3")
  For i = 1 To .Count
   MsgBox .Item(i).Address(False, False)
  Next i
 End With
End Sub

「excel マクロ for文 range」
「excel vba for文 range」
「excel vb2010 for文 range」
という検索をなさった方は、このようなコードを探していらしたのでしょうか。

Withを使わずRangeにFor~Nextループを回す

Withキーワードを使わない場合は、以下のようなコードです。

Sub RangeをFor文で処理する_Withなし()
 Dim i As Long

 For i = 1 To Range("A1:B3").Count
  MsgBox Range("A1:B3")(i).Address(False, False)
 Next i

End Sub

For~Nextループの中の、
   MsgBox Range("A1:B3")(i).Address(False, False)
の部分は、Itemプロパティを明記して、
   MsgBox Range("A1:B3").Item(i).Address(False, False)
としても同じです。

Rangeに2重のFor~Nextループを回す

ここまでご紹介した3つのマクロは、いわばアルファベットの「z」の字を書くような順番で、同じ行の処理が終わってから、次の行を処理していました。

アルファベットの「n」の字を書くような順番、同じ列の処理が終わってから、次の列の処理をしたいのなら、Range.Itemプロパティの、

For文でRangeを処理するExcelマクロ

2つの引数を使った以下のようなマクロです。

Sub Rangeを2重のFor文で処理する()
 Dim r As Long, c As Long

 With Range("A1:B3")
  For c = 1 To .Columns.Count
   For r = 1 To .Rows.Count
    MsgBox .Item(r, c).Address(False, False)
   Next r
  Next c
 End With

End Sub

上記のマクロを実行すると
  A1
  A2
  A3
  B1
  B2
  B3
という順で、アドレスがメッセージボックスに表示されます。

WithなしでRangeに2重のFor~Nextループを回す

Withキーワードを使わない場合は以下のとおりです。

Sub Rangeを2重のFor文で処理する_Withなし()
 Dim r As Long, c As Long

 For c = 1 To Range("A1:B3").Columns.Count
  For r = 1 To Range("A1:B3").Rows.Count
   MsgBox Range("A1:B3")(r, c).Address(False, False)
  Next r
 Next c
End Sub

ループの中の、
   MsgBox Range("A1:B3")(r, c).Address(False, False)
は、Itemプロパティを明記した、
   MsgBox Range("A1:B3").Item(r, c).Address(False, False)
でもOKです。

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » For文でRangeを処理するExcelマクロ

「ExcelVBA Rangeオブジェクト」の記事一覧

検索


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

.