「この範囲の全部のセルに同じ処理がしたい、、、」
「この配列の要素全部に同じ処理がしたい、、、」
そんな事を思った事はないでしょうか。
そんな時にぴったりなのがFor Each ~ Nextステートメントです!!
今回は便利なFor Each ~ Nextステートメントについてご紹介します!!
指定した範囲を一括処理してくれる
For Each ~ Nextは、指定したコレクションのオブジェクトや配列の要素の全てに同じ処理をするステートメントです。
「はい?コレクション?配列?」
となりますが、最初は指定した範囲に同じ処理をしてくれるくらいの感覚で問題ありません。
散らばった書類の山を指定して、書類の向きを揃える処理をするようなイメージです。
for each ~ Next
for each ~ Nextの構文は下記のようになっています。
1 2 3 4 5 6 7 |
Sub sample() For Each 変数 In 処理する範囲 ~ここに処理の内容~ Next End Sub |
まず「処理する範囲」の部分ですが、ここには配列名やオブジェクト等を記述します。
指定したオブジェクトや配列を一括で処理出来る訳です!!便利!!
次に「変数」の部分ですが「処理する範囲」に何を指定したかによって使えるデータ型が限られています。
「処理する範囲」に何を指定しても共通して、Variant型の変数を指定する事が出来ます。
特にこだわらない人は Variant型の変数を指定しましょう。
データ型については、変数についての記事で解説していますので、分からない方はこちらをお読み下さい
サンプル
上記の構文を使用して作成したサンプルがこちら!!
A1からC3の範囲に数字を入力する処理になっています。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub sample() Dim target As Variant Dim i As Integer For Each target In Range("A1:C3") target.Value = i i = i + 1 Next End Sub |
実行するとこのようにセルに数字が入力されます。
処理する順番は?
指定した範囲に対して一括で同じ処理をしてくれる便利なステートメントですが、全て同時に処理をしている訳ではありません。
先程のサンプル結果の数字を見てみると、左上のセルから右に向かって数字が増えています。
このサンプルでは処理をする度に数字が増えますから、上の行から順番に左から右へ処理しているのが分かりますね。
ちょっとした豆知識ではありますが、処理の内容によってこれを知っておくと得する場合もありますので、頭の片隅に置いてましょう!!
ちなみに公式のドキュメントを見ても、処理の順番について触れていませんのでアップデートの過程で変更される可能性もあります。
現状の処理順に依存するプログラムを作成するのは控えめにしておいた方が良いのかもしれません。
まとめ
一括処理は便利な反面、使う場面が限られます。
人によっては全く使わない人もいれば、これがないと生きていけない人もいると思います。
しかし全く使わないと思っている方も、急に使うタイミングが来る可能性があります。
急な上司の依頼とか、急な上司の依頼とかなんですがね、あるんですよ。。。
そんな時の為に是非覚えておきましょう!!
コメント