【VBA】配列の要素を全て取り出せる!For Each〜Next文の使用方法【5分で理解】

2020年4月30日

配列の要素を全て繰り返す処理を知ってますか?

Excelマクロ(VBA)には数種類の繰り返し処理が存在してます。
本記事では配列やコレクションの要素を全て処理できる「For Each〜Next」分の使用方法を説明します。

5分で誰でもわかることを目標に説明します。よろしくお願いします!
では、確認していきましょう。

この記事を読んで欲しい人

  • VBAの繰り返し処理を学習中の人
  • 配列の要素を全て処理したい人
  • コレクションの要素を全て処理したい人
この記事を読むと
  • 5分で簡単にFor Each〜Next文を使用した繰り返し処理を理解できる
  • 効率的に配列やコレクションの全ての要素を処理できるよになる

関連記事

For Each〜Next文の基本

For Each〜Next文の基本

はじめにFor Each文の使用用途と基本構文について説明します。
使用する上で基本的な部分になるので確実にチェックしましょう!

使用用途

どのような時に使用するのか、どのような処理に向いているかです。

  • 配列の要素を全て取り出す時に使用される
  • VBAコレクションの要素を全て取り出す時に使用される

上記2点の時に使用されることが多い構文です。
For〜Next分でも処理は可能なのですが、For Each〜Next分で作成した方がソースコードの行数が少なくなるため、配列の要素を処理する際はFor Each分を使用することをおすすめします。

基本構文

For Each〜Next分の基本構文について説明します。

基本構文
For Each Value in testArray
  [処理]
Next Value

[For] [Each] [in] [Next]については定型です。
どのようなプログラムでも変わることはないので変化しないということを覚えましょう。

testArrayは配列(もしくはコレクション)の変数を記入してください。
[処理]は今回のループで実行される処理を入力する部分です。
Valueは配列の要素を一時出来に格納される変数です。

配列もしくはコレクションのループができますが、本記事では配列を例に説明します。
次の章からはより詳しく確認してきます。

For Each〜Next文の使用例

For Each〜Next文の使用例

配列の中の要素を全て出力する簡単なサンプルプログラムを紹介します。
For Each〜Next文を使用した場合と使用しない場合の2種類で比較していきます。

For Each文を使用しない場合

For Each文を使用しなかった場合のサンプルプログラムです。
17行目以降を確認してみてください。配列の要素を一つずつ順番に出力していることがわかります。

Sub noForEach()

    ' 変数の宣言
    Dim testArray(10)
     '変数に要素を代入
    testArray(0) = "black"
    testArray(1) = "red"
    testArray(2) = "blue"
    testArray(3) = "yellow"
    testArray(4) = "cyan"
    testArray(5) = "magenta"
    testArray(6) = "green"
    testArray(7) = "pink"
    testArray(8) = "orange"
    testArray(9) = "Purple"
    
    ' 配列の要素を全て出力
    MsgBox testArray(0)
    MsgBox testArray(1)
    MsgBox testArray(2)
    MsgBox testArray(3)
    MsgBox testArray(4)
    MsgBox testArray(5)
    MsgBox testArray(6)
    MsgBox testArray(7)
    MsgBox testArray(8)
    MsgBox testArray(9)

End Sub

For Each文を使用した場合

For Each文を使用した場合のサンプルプログラムです。
こちらも17行以降を確認してください。

繰り返し文を使用していることがわかります。

より詳しい説明は次の章で確認していきます。

Sub forEach()

    ' 変数の宣言
    Dim testArray(10), value
     '変数に要素を代入
    testArray(0) = "black"
    testArray(1) = "red"
    testArray(2) = "blue"
    testArray(3) = "yellow"
    testArray(4) = "cyan"
    testArray(5) = "magenta"
    testArray(6) = "green"
    testArray(7) = "pink"
    testArray(8) = "orange"
    testArray(9) = "Purple"
    
     'ForEach文の開始
    For Each value In testArray
         ' 配列の要素を全て出力
        MsgBox value
     ' ループ
    Next value

End Sub

For Each〜Next文の処理を確認

For Each文を1行ずつ説明していきたいと思います。
なお、サンプルプログラムの17行以降を例に説明したいと思います。

'ForEach文の開始
For Each value In testArray
     ' 配列の要素を全て出力
    MsgBox value
' ループ
Next value

処理の流れの確認

処理の内容を一つずつ確認していきます。

For Each〜Nextの文が最後まで終わったらNext以下の処理が継続されます。

①配列testArrayの要素(0)がValueに代入される

配列testArrayの要素(0)がValueに代入される

②valueに代入された要素が出力される

valueに代入された要素が出力される

③nextまで処理されたら最初に戻る

nextまで処理されたら最初に戻る

④testArrayの次の要素が変数valueに代入される

testArrayの次の要素が変数valueに代入される

⑤valueに代入された要素が出力される

valueに代入された要素が出力される

⑥同じ処理が配列の要素の最後まで繰り返される

同じ処理が配列の要素の最後まで繰り返される

以上、処理ごとの説明でした。
処理がわからない場合は1つずつ処理を確認すると理解が深まりますのでおすすめです。

まとめ

まとめ

いかがだったでしょうか

For Each文を使用した繰り返し処理の説明でした

配列の要素を全て処理する際に使用されるということを覚えましょう

いろいろな繰り返し文を覚えて効率的なコードの作成ができるようにしていきましょう!

関連記事