For Each Next文を使った繰り返し処理
VBA を使った繰り返し処理の一つである For Each ... Next 文の使い方です。 For Each ... Next ではコレクションに含まれるオブジェクトを順に取り出したり、配列に含まれる要素を順に取り出して処理を行いたい場合に使用します。ここでは Excel VBA で For Each Next 文を使った繰り返し処理を行う方法について解説します。
(Last modified: )
For Each...Nextの使い方
VBA で繰り返し処理を行う方法の一つである For Each ... Next
の使い方です。書式は次の通りです。
For Each 変数 In コレクションまたは配列 実行する処理 Next
コレクションからオブジェクトを一つ取り出し変数に代入します。そのあとで繰り返し処理を 1 回行います。再びコレクションからオブジェクトを一つ取り出して変数に代入し繰り返し処理を行います。これをコレクションに含まれるオブジェクトがなくなるまで繰り返します。
配列を指定した場合も同じように配列から要素を一つ取り出して変数に代入したあと繰り返し処理を行います。配列のすべての要素を取り出すまで繰り返します。
繰り返し処理が何回行われるのかはコレクションに含まれるオブジェクトの数、または配列に含まれる要素の数によって決まります。
それでは簡単なサンプルを作成して試してみます。
Option Explicit Sub テスト() Dim r As Range For Each r In Range("B2:B5") r.Value = r.Value * 0.9 Next End Sub
このサンプルではセル範囲 B2:B7 に含まれるセルを順番に取り出し、それぞれのセルの値に 0.9 を乗算した結果をセルに新しい値として入力します。
プログラムの実行前にワークシートには次のような値を入力してあります。
それでは実際にプログラムを実行してみます。
プログラムを実行するとワークシートの値が次のように変更されました。
もう一つ別のサンプルを作成して試してみます。
Option Explicit Sub テスト() Dim pref(4) As String Dim I As Variant pref(0) = "東京都" pref(1) = "大阪府" pref(2) = "愛知県" pref(3) = "北海道" For Each I In pref Debug.Print I Next I End Sub
このサンプルでは 4 つの要素を持つ配列から要素を順番に取り出し、イミディエイトウィンドウに出力しています。
それでは実際にプログラムを実行してみます。
プログラムを実行するとイミディエイトウィンドウに次のように出力されました。
このようにコレクションや配列に含まれるオブジェクトや要素を順番に取得して繰り返し処理を行いたい場合に For Each...Next
を使用すると便利です。
For Each...Nextで使用する変数のデータ型について
For Each ... Next
ではコレクションや配列からオブジェクトや要素を取り出して変数に代入します。
For Each 変数 In コレクションまたは配列
実行する処理
Next
この変数のデータ型は Range
や Worksheet
などのオブジェクトを表すデータ型または Variant
型しか指定することができませんので注意が必要です。
コレクションからオブジェクトを取り出す場合はそのオブジェクトを表すデータ型を指定すればいいので問題ないですが、配列から要素を取り出す場合にはその要素のデータ型を指定してしまうとエラーとなるので注意が必要です。
例えば先ほどのサンプルを次のように変更してみます。
Option Explicit
Sub テスト()
Dim pref(2) As String
Dim I As String
pref(0) = "東京都"
pref(1) = "大阪府"
For Each I In pref
Debug.Print I
Next I
End Sub
配列は String
型の配列なので、 For Each ... Next
で使用する変数のデータ型を String
型にしてみます。
このプログラムを実行すると次のように「For Each を配列で使用する場合は、バリアント型の配列でなければなりません。」というエラーが表示されます。
このように For Each ... Next
で使用する変数のデータ型については Variant
型しか使用できない点に注意してください。
-- --
Excel VBA で For Each Next 文を使った繰り返し処理を行う方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。