【VBA入門】For Eachで配列やコレクション、Selectionを操作

For Eachステートメントって使ってますか?

For Eachステートメントは配列やコレクションなどですべての要素にアクセスする場合に使用すると手短に記述することができて便利です。

この記事では、For Eachステートメントについて

  • For Eachとは
  • For Eachの使い方
  • Selectionを操作する方法
  • コレクションを操作する方法
  • フォルダ内のファイル名を取得する方法

など基本的な内容から、応用的な内容についても解説していきます。

今回はFor Eachステートメントについて、使い方をわかりやすく解説します!

For Eachステートメントとは

For Eachステートメントとは、配列やコレクションなどのグループの各要素に対して繰り返し処理を行う場合に使用します。

ちなみにコレクションとは、オブジェクトの集合のことです。繰り返し処理を行うよく似たステートメントにFor Nextステートメントがあります。For Nextステートメントは配列やコレクションに限らず用いられます。

これに対して、For Eachステートメントは配列やコレクションなどのグループに対して用いることで効果を発揮します。

それではFor Eachステートメントの効果について確認していいきましょう!

For Eachの使い方

For Eachステートメントは以下のように記述して使います。

配列やコレクションの要素を受け取る変数を宣言しますが、For Eachステートメントで使う要素の型はバリアント型もしくはオブジェクト型で指定する必要があります。

なお、Dimステートメントを使った変数の宣言については省略することもできます。

それでは具体例についてみていきましょう!

配列を操作する方法

配列の要素を操作する方法についてサンプルコードでみていきましょう。

実行結果:
ForEach05

このサンプルコードでは要素のデータ型がバリアント型の動的配列arrを宣言しています。

Array関数を使って配列arrを初期化しています。配列arrの要素にアクセスするためにFor Eachステートメントを使用しています。

配列の要素を受け取る変数VarはDimステートメントを使った宣言を省略して使っています。配列の使い方についてはこちらで詳しく解説していますので、ぜひ参考にしてください。

【VBA入門】配列総まとめ(初期化、ループ操作、コピー、結合、比較)
更新日 : 2019年4月18日

For Nextとの使い分けについて

先ほどのFor Eachステートメントを使ったサンプルコードをFor Nextステートメントを使って書き換えてみましょう。

実行結果:
ForEach05

このサンプルコードでは、配列arrの要素にアクセスするためにFor Nextステートメントを使用しています。For Nextステートメントを使用する場合は、インデックス番号に用いる変数iを宣言する必要があります。

また、LBound関数とUBound関数を使ってFor Nextステートメントのカウンタの初期値と到達値を指定する必要があります。これによってFor Eachステートメントを使う場合に比べて、記述が長くなり面倒が生じます。

配列やコレクションのようなグループの要素にアクセスする場合はFor Eachステートメントを使う方が手短に記述できるのでオススメです。

For Next文の使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。

【VBA For Next】ループ処理の基本を5つのステップで完全理解
更新日 : 2019年4月20日

逆順でループを回すには?

配列やコレクションの要素に逆順でアクセスしたい場合がありますよね?でも、For Eachステートメントでは順番を指定することはできません。

ですので、逆順でアクセスするなど順番を指定する場合はFor Nextステートメントを使う必要があります。

For Nextステートメントを使って、逆順で要素にアクセスするサンプルコードをみていきましょう。

実行結果:
ForEach06

このサンプルコードでは、配列arrの要素に逆順でアクセスするためにFor Nextステートメントを使用しています。

Selectionを操作する方法

Selectionとは、Excelシート上で選択されたセルの範囲のことです。

For EachステートメントではこのSelection内のセルを要素として受け取ることができます。

サンプルコードで確認していきましょう。

実行結果:
ForEach03

このサンプルコードでは、Excelのシート上で選択した範囲の複数のセルにFor Eachステートメントを使って文字列を入力しています。

コレクションを操作する方法

コレクションの要素にアクセスする場合にも、For Eachステートメントを使うと便利です。

VBAで既存のコレクションといえば、Worksheetsがあります。

Worksheetsコレクションを例にしてサンプルコードで確認していきましょう。

実行結果:
ForEach07

このサンプルコードでは、Worksheetsコレクションの要素にFor Eachステートメントを使ってアクセスし、各Worksheetのシート名を取得しています。

Collection(コレクション)の使い方につていはこちらで詳しく解説していますので、ぜひ参考にしてください。

【VBA入門】Collectionオブジェクトの使い方
更新日 : 2018年11月12日

フォルダ内のファイル名を取得する方法

フォルダ内のブックを一括処理したい場合があります。そんな場合にもFor Eachステートメントを使うと手短に記述できて便利です。

For Eachステートメントでフォルダ内のファイルを扱うにはFileSystemオブジェクトを使用する必要があります。

サンプルコードで確認しましょう。

このサンプルコードでは、まずCreateObject(“Scripting.FileSystemObject”)と記述してFileSystemオブジェクトmyObjを作成しています。

オブジェクトmyObjからgetfolderメソッドを呼び出しこのワークブックのパスを指定しています。パスに含まれるファイルに関する情報をFilesコレクションで取得しています。

For Eachステートメントを使ってFilesコレクションのすべての要素にアクセスし、同じフォルダ内のすべてのファイルのファイル名を取得しています。

まとめ

ここでは、For Eachステートメントについて説明しました。

For Eachステートメントは配列やコレクションなどの要素にアクセスする場合は、For Nextステートメントよりも手短に記述することができます。

使いこなすことができるように、この記事を何度も参考にして下さいね!

Excel VBAを最短で習得したい方へ

元々ITリテラシーの高い方やプログラムの学び方がわかっている方であれば、この記事通りに進めていけば、Excel VBAを独学で習得することができるでしょう。

ただし、実際の学習期間中はつまづいている時間がほとんどです。

「なかなかやり遂げられ無い、挫折してしまった」
「時間が足りない」
「情報が少なくどう調べればいいかわからない」
「エラーを解決することができない」

このような悩みを抱えている方も少なく無いと思います。

  • もう挫折したくない
  • 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
  • 自分だけのカリキュラムで効率的に勉強したい
そんな方はお気軽に侍エンジニア塾までご相談ください。

お一人お一人に専属のインストラクターがつくので、より深くExcel VBAについて学習することできます。

まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方やカリキュラムを考えてみませんか?

Excel VBAならではの学習方法や、現役エンジニアから貴重なアドバイスを受けることができます。

詳しくは下の画像をクリックして弊社サービス内容をご確認ください。

cta2_vba2

非常識な結果を出す卒業生多数!

エンジニアキャリア戦略

人気記事セレクション

3000名以上来場の人気セミナーが開催決定

18歳で時給6000円だった侍エンジニア塾代表の木内より、『プログラミングで人生を変える』ための学習方法をお教えます。

0からプログラミングを習得し、フリーランスエンジニアになる方法プログラミング学習の効率を劇的に上げる学習メソッドを解説しますので、奮ってご参加ください。

  • 日付:4/20(土),4/27(土)
  • 時間:14:00〜17:35終了予定
  • 場所:当社 道玄坂オフィス
  • 住所:〒150-0043 東京都渋谷区道玄坂2丁目11-1 Gスクエア渋谷道玄坂 4F *Googleマップでは「東京都渋谷区道玄坂2丁目11-1」で検索してください。近隣にスクエア渋谷という別のビルがあるためご留意ください。
  • 参加費:無料
  • URL:https://seminar.sejuku.net/
詳しくは下の画像をクリックして弊社セミナー内容をご確認ください。

LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]