「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マクロを確認しておきましょう。
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でも書けるものです)。
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キーワードを使わない場合は、以下のようなコードです。
Dim i As Long
For i = 1 To Range("A1:B3").Count
MsgBox Range("A1:B3")(i).Address(False, False)
Next i
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プロパティの、
2つの引数を使った以下のようなマクロです。
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
上記のマクロを実行すると
A1
A2
A3
B1
B2
B3
という順で、アドレスがメッセージボックスに表示されます。
WithなしでRangeに2重のFor~Nextループを回す
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 » Excel VBA Rangeオブジェクト » For文でRangeを処理するExcelマクロ