Excel VBAで繰り返しを行う:For Each Next

ExcelのVBAを使って次のような処理をしたい場合があります。

  •  配列データをうまく扱いたい。
  •  現在開いている全てのブック名を調べたい。
  •  全てのシート名を調べたい。
  •  複数のセルの値を調べたい。

このような「複数の要素を扱いたい」場合にはFor Each Nextが便利です。For Each Nextはコレクションや配列に効率よくアクセスするしくみです。一般的にカウンタ変数を使ったFor Next処理よりもスピードが速くなることが多いです。

For Each Nextの基本

For Each Nextは下記のように使います。

「指定したコレクションまたは配列のそれぞれの要素に、ある一つの処理を繰り返す」という意味です。配列の場合とコレクション(同じ要素のまとまり)の場合とで使い方に大きな違いはありませんが、コレクションはExcelで既に用意されているものを使うことが多いので分けて説明していきます。

配列の処理

配列を使った例を書いてみます。適当な配列を一つ定義して、その配列の内容を全て表示します。

コレクションの処理

コレクションとは、同じオブジェクトが複数まとまったことのことを言います。ExcelではWorkbookやSheetなど色々なオブジェクトがコレクションというものを使って管理されています。Sheetsコレクションには現在開いているSheetが、Workbooksコレクションには現在開いているすべてのWorkbookが入っているというイメージです。コレクションには配列と同じように色々な値を保存できます。

これを使って現在開いている全てのブック名を表示してみます。

次に、Sheetsコレクションを使って、全てのシート名の頭に「変更後」と加えてみます。

セルの処理

Range関数でセルの内容にアクセスできますが、For Each Nextを併用してこれを処理することができます。

ここではRange関数で指定したセルの中から「愛知県」という文字列を含むセルを探して、さらに見つけたセルの背景色を赤色にする例をご紹介します。

まとめ

いかがでしたでしょうか。このように広く応用ができる文なので、ぜひマスターして自在に扱えるようになってください。


Welcome to UX MILK

UX MILKはより良いサービスやプロダクトを作りたい人のためのメディアです。

このサイトについて

UX MILKのディレクター募集