エクセルに限らず、プログラミングの世界で最も強力で破壊的な威力を発揮するのがループ(繰り返し)処理です。

慣れれば誰でもサラサラっと書けてしまうのですが、覚え始めやど忘れしてしまったときなどに役立てていただくため、基本的なループ処理構文の雛形をご紹介しますので、コピペして使ってください。

また、サンプルファイルもダウンロードしてご確認いただけます。

<ループ処理のサンプルファイルはこちらです>
loop-template.xls

サンプルファイルのシートには何も書いていませんが、Alt+F11キーを押していただくとマクロのコードをご確認いただけます。

この記事はExcel2002、Excel2003、Excel2007、Excel2010、Excel2013を対象にしています。

スポンサーリンク

ループ処理の入門は迷わずFor~Next

Excel VBAにおけるループ処理構文は何種類かありますが、その中でも最もスタンダードで入門用として扱いやすいのがFor~Nextステートメントです。

以下かんたんに解説します。

ちなみに、変数の宣言部分でLong型を使っていますが、Variant型でも良いですし、型を宣言せずに「Dim i」だけでも構いません。
変数の型については別の記事で取り上げますので、今回は深く考えないでください。

For~Next構文の最大の特徴はなんといっても始まりと終わりの値を自分で決めるところにある

数字を繰り上げていくためのカウンターとして使う変数(今回のサンプルではi)の始まりと終わりの数値を明確に指定できるので、とてもシンプルです。

上記は変数iが1から1000になるまでという意味になります。

あらかじめ始まりと終わりが決まっている(わかっている)場合に向いていて、逆にループ処理の結果を待たなければ何件になるかわからない場合などには向いてません。そういう場合は後述のDo Loopを使った方が楽です。

Do Loopと違ってFor Nextは範囲が明確に決まっていますので、書き方を間違えて永久ループになってしまうこともありません。

条件に応じて処理件数が変わる(件数がわからない)場合はDo~Loop

あらかじめ処理対象の件数がわかっていない場合は、「一定の条件であり続ける限り」あるいは「一定の条件に達するまで」処理をし続けるDo~Loopステートメントを使います。

一定の条件が続く限り処理を続けるサンプル(Whileキーワードで判定)

先ほどのFor~Next構文のコピペ用マクロ(For_Next_Sample)を実行した後に下記のマクロを実行すると、今セルに入っている数字にそれぞれ1を足します。

For Nextと違ってあらかじめ範囲を指定せず、1列目(A列)になにか値が入っている限りループ処理が続きます。

次のUntilキーワードを使って条件判定する場合との違いは【~である間】処理を続けるというところです。

一定の条件に達するまで処理を続けるサンプル(Untilキーワードで判定)

先ほどと同様、今セルに入っている数字にそれぞれ1を足します。

前のWhileキーワードを使って条件判定する場合との違いは【~になるまで】処理を続けるというところです。

オブジェクトの集まり(コレクション)をひと周りループするならFor Each~Next

今まで書いてきたFor~NextやDo~Loopは数値をもとに判定することが多いのですが、これに対してFor Each~Nextはオブジェクトの集まりを片っ端から処理するときに役立ちます。

簡単な例を見てみましょう。

上の例ではセルの集まりを処理していますが、例えば他にもシートの集まりなどに対してもループ処理することができます。

駆け足で書いてきましたけれども、いかがでしたでしょうか。

今日のExcelスキルアップ

ループ処理は超強力なプログラミング手法です。
これに手を出し始めたあなたはもう立派なプログラマーです。

私もなれるまでの間はよくど忘れして本を開いたりネット検索したりしました。また、Do~Loopの最後で変数を繰り上げるのを忘れて永久ループを実行してしまったりという失敗は今でもたまにやります。。。

これからも、もしループの構文をうっかり忘れしてしまったら、この記事のことを思い出してくださいね。

ではまた。

Pocket