【Excel VBA】For文いろいろ

当ページのリンクには広告が含まれている可能性があります。
For文

こんにちは、ユーキです。

今回は、VBAのFor文のいろいろな書き方を紹介します。

VBAの繰り返し処理はDo~Loop、Whileなどありますが、今回はFor文の紹介になります。

目次

For文

基本

1~5まで5回処理を繰り返すFor文になります。ループカウンタに指定した変数i が5になるまで処理を繰り返します。ループカウンタi は1ずつ加算されます。

Dim i As Integer
For i = 1 To 5
    Debug.Print i
Next

Toに指定する値はActiveWorkbook.Sheets.Countなどのようなプロパティでもよいですし、コード上にある変数を指定してもOKです。

Dim i As Integer
Dim endCount As Integer
endCount = 10
For i = 1 To endCount ’ここがActiveWorkbook.Sheets.CountでもOK
    Debug.Print i
Next

加算値が1以外のFor文

ループカウンタi が2ずつ増やしていく処理の場合、「Step 2」と記載します。

Dim i As Integer
For i = 1 To 10 Step 2
    Debug.Print i
Next

負数を指定することも可能です。10から1まで1つずつ減っていく処理は以下のようになります。

Dim i As Integer
For i = 10 To 1 Step -1
    Debug.Print i
Next

処理を途中で抜ける

繰り返し処理を途中で抜けるには、Exit Forを使います。合計値が10を超えたら処理を抜ける処理を書いてみます。

Dim i As Integer
Dim sum As Integer
sum = 0
For i = 1 To 10
    sum = sum + i
    If sum > 10 Then
        Debug.Print "処理終了"
        Exit For
    End If
    Debug.Print i
Next

「Goto ラベル」でも可能ですが、Goto文は基本禁じ手と言われます(処理が追いづらくなるため)。そのため、For文を途中で抜ける場合には、Exit Forを使いましょう。

’参考までにGoto文で処理を抜ける場合
Public Sub Test()
    Dim i As Integer
    Dim sum As Integer
    
    sum = 0
    
    For i = 1 To 10
        sum = sum + i
        If sum > 10 Then
            'Goto文は禁じ手です。
            GoTo Ex
        End If
        Debug.Print i
    Next
    
Exit Sub
Ex:
    Debug.Print "処理終了"
End Sub

二重ループ

For文の中でFor文を実行することも可能です。Exit Forは直近のFor文に対してのみ有効となります。

    Dim i As Integer
    Dim k As Integer
    
    For i = 1 To 3
        For k = 1 To 5
            Debug.Print i & " * " & k; " = " & i * k
            If (i * k) > 5 Then
                ’ここで抜けるループは直近For文のみ
                Exit For
            End If
        Next
    Next</code></pre>

コレクションの繰り返し(For Each)

配列をループさせたい場合、For Each文が使えます。配列の要素はバリアント型の変数で受けます。

Dim arr(5) As Integer
Dim i As Variant
arr(0) = 5
arr(1) = 10
arr(2) = 20
arr(3) = 30
arr(4) = 40
arr(5) = 50
For Each i In arr
    Debug.Print i
Next

ブックのシート単位で処理をしたいような場合には、以下ような使い方も可能です。

Dim sh As Variant
For Each sh In ActiveWorkbook.Sheets
    Debug.Print sh.Name
Next

まとめ

今回は、VBAのFor文について述べました。

Point
  • 基本は1ずつ加算で繰り返す
  • 増減の単位を指定することも可能(2ずつ、-1ずつなど)
  • 処理の途中で抜けるときは、Exit Forを使う
  • コレクション単位でループ処理にはFor Eachが使える

少しでもお役に立てば、幸いです。

スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

旅好き職業プログラマ。文系大学卒業後、ITソフトウエア開発会社に勤務してプログラミング言語を学ぶ。現在は転職し、プロジェクトマネージャ的ポジションで生産管理システムの開発にあたる。
得意言語は、VB、VB.NET、C#.NET、Java、SQLなど。

目次