【エクセルVBAマクロ】Whileの使い方をわかりやすく解説!【For文との違いは?】

スポンサードリンク
VBA
  • 他の人が作ったマクロを見ていたら、「While」ってのがあったんだけど、これは何?
  • 「While」の使い方や書き方を知りたい
  • 「While」を使うメリットを知りたい

このようなお悩みをお持ちですか?
この記事を読むことで、下記のことがわかります。

  • 「While」の概要がわかる
  • 「While」の使い方や書き方を学べる
  • 「While」を使うメリットを知れる

VBAマクロ歴3年の私が、できるだけわかりやすく解説いたします。

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

スポンサードリンク

Whileとは?(エクセルVBAマクロ)

「While」は、繰り返し処理を行うことができるステートメントです。
「ステートメント」とは、「まとまり」や「ブロック」というような解釈でOKです。
繰り返し処理の始まりから終わりまでといった感じでしょうか。
文章では伝わりづらいので、早速コードを見ていきましょう。

Sub 繰り返し()
    Dim i As Integer
    i = 1
    While i <= 5
        Range("A"&i).Value = i
        i = i + 1
    Wend
End Sub

上記コードは、A1~A5に1~5の連番を書き込むWhile文です。
4行目の「While」~7行目の「Wend」までがWhileステートメントです。
このコードを実行したのもが下図になります。

今の段階では全て理解できなくても大丈夫です。
次項で使い方や書き方を詳しく見ていきましょう。

今回はかなりシンプルな処理を例に挙げているので、初心者でも理解しやすいかと思います。

スポンサードリンク

Whileの使い方・書き方

前項のコードを例に挙げて、書き方を詳しく解説いたします。

Sub 繰り返し()
    Dim i As Integer
    i = 1
    While i <= 5
        Range("A"&i).Value = i
        i = i + 1
    Wend
End Sub

プロシージャの作成

Sub 繰り返し()

End Sub

プロシージャなど、マクロの基礎は下記記事でわかりやすく解説しております。
コードだけではなく、開発タブの表示からマクロの保存まで知りたい方はご参考ください。

変数の宣言

繰り返し処理で使用する変数「i」の宣言と代入を行います。

    Dim i As Integer
    i = 1

変数や宣言についての詳しい解説は、下記記事をご参考ください。

今回は変数「i」に「1」を代入しておりますが、目的によっては違う数字を入れる場合もあります。

繰り返し処理(While)

では本題の繰り返し処理について解説いたします。

    While i <= 5
        Range("A"&i).Value = i
        i = i + 1
    Wend

まず「While」を書いたら、その後ろに「条件式」を書きます。
この「条件式」は、「繰り返し処理を続ける条件の式」です。
今回は、5回繰り返し処理を続けたかったので、【変数「i」が「5以下の場合」は繰り返し処理を続ける】としています。(「i <= 5」は「iが5以下の場合」という条件式)

後ほど繰り返しの流れを解説します。

次の行に「繰り返したい処理」を書きます。
今回はA列のセルに変数「i」の値を書き込みする処理を記述しています。
コードの3行目で変数「i」に1が代入されているので、1周目は【Range(“A1”).Value = 1】となり、A1セルに1が書き込みされます。

このままWhileを終えてはいけません。
なぜなら、「i」が永遠に1のままとなり無限ループになってしまうからです。
無限ループを回避するために「i」に1を足す処理を書きます。それが6行目です。
これで「i」は繰り返し処理のたびに「2」「3」「4」と加算されていき、「5」になると繰り返し処理を終了します。

次の行に忘れず「Wend」を書きましょう。
これはWhileステートメントの終わりを意味します。

    While 繰り返しを続ける条件
        繰り返す処理
        次のループへ移る処理
    Wend

では、今回の繰り返し処理の流れを簡単に見ていきましょう。

【繰り返し1周目】
i = 1
A1セルに1を書き込む(Range(“A1”).Value = 1)
iを2にして2週目へ

【繰り返し2周目】
i = 2
A2セルに2を書き込む(Range(“A2”).Value = 2)
iを3にして3週目へ

【繰り返し3周目】
i = 3
A3セルに3を書き込む(Range(“A3”).Value = 3)
iを4にして4週目へ

【繰り返し4周目】
i = 4
A4セルに4を書き込む(Range(“A4”).Value = 4)
iを5にして5週目へ

【繰り返し5周目】
i = 5
A5セルに5を書き込む(Range(“A5”).Value = 5)
iを6にして6週目へ

iが6になり、5以下ではなくなったため、繰り返し処理を終了

では次に、Whileを使うメリットについて見ていきましょう。

スポンサードリンク

Whileを使うメリット

While文を使わなくても繰り返し処理は可能です。
下記コードを見てください。

Sub 繰り返し()
    Range("A1").Value = 1
    Range("A2").Value = 2
    Range("A3").Value = 3
    Range("A4").Value = 4
    Range("A5").Value = 5
End Sub

これはWhileを使わずに前項と同じ処理を行った例です。

ぱっと見てわかりやすいのはいいのですが、あまりスマートとは言えません…。
また、1~5ではなく、100や1000まであった場合どうでしょう?
Whileを使うことで、コードを簡略化し、より短い記述でマクロを実行することが可能になるわけです。

For文との違い

繰り返し処理を行うステートメントとして代表的なものに「For」があります。

「While」と「For」はどう違うのでしょうか?
特徴や違いをまとめてみました。

【While】

  • 用途:条件が満たされている間ループを実行(i <= 5)
  • 繰り返し回数:条件を満たす限り無限回実行可能
  • 無限ループの可能性:条件の更新(i = i + 1)を忘れると無限ループになる
  • 使用場面:繰り返し回数が不定な場合

【For】

  • 用途:繰り返し回数が決まっている場合に適用(i = 1 To 5)
  • 繰り返し回数:指定回数で必ず終了
  • 無限ループの可能性:基本的に無限ループにならない
  • 使用場面:繰り返し回数が決まっている場合

繰り返し回数が決まっている場合は「For」、決まっていない場合は「While」と使い分けるのが適切です。

また、無限ループになりやすいのが「While」の欠点です。
うっかり「i = i + 1」を書き忘れないようにしましょう。

【どうしても無限ループが怖い場合は】
実行ボタン押してマクロを実行するのではなく、「F8キー」を押しましょう。
「F8キー」を押すたびにマクロが一行ずつ実行されていきます。
無限ループになっていると感じたら、「リセットボタン」を押すことでマクロを安全に停止させることができます。

リセットボタン
スポンサードリンク

Do While

Whileに似た構文として「Do While」というものがあります。
まずは両方のコードを比較してみましょう。

【While】

Sub 繰り返し()
    Dim i As Integer
    i = 1
    While i <= 5
        Range("A"&i).Value = i
        i = i + 1
    Wend
End Sub

【Do While】

Sub 繰り返し()
    Dim i As Integer
    i = 1
    Do While i <= 5
        Range("A"&i).Value = i
        i = i + 1
    Loop
End Sub

構文はほぼ同じですね。
始まり(While と Do While)・終わり(Wend と Loop)が違うぐらいです。

次にその他の違いを見ていきましょう。

【While】

  • 使いやすさ:シンプルで初心者向け
  • 推奨度:古い書き方
  • 機能:条件判定が 1 つのみ

【Do While】

  • 使いやすさ:柔軟性が高く、中・上級者向け
  • 推奨度:一般的には Do While が推奨される
  • 機能:Exit Doで途中終了が可能

▼Exit Doを使ったサンプル

Sub 繰り返し()
    Dim i As Integer
    i = 1
    Do While i <= 9999
        Range("A"&i).Value = i
        If i >= 5 Then Exit Do ' i が 5 以上ならループを抜ける
        i = i + 1
    Loop
End Sub

今回のような簡単な繰り返し処理を行うなら、どちらを使っても大差はありません。
複雑なループ文を作るには柔軟性の高い「Do While」を使う方がよく、一般的にも推奨されています。

まずはシンプルな「While」から始め、複雑な処理が必要になったら「Do While」に切り替えるくらいでOKです。

スポンサードリンク

最後に

VBAのWhileについて解説いたしました。

当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました