Excel VBA | While…Wend

VBA
スポンサーリンク

VBA(Excelマクロ)で「同じ処理を何回も繰り返す」ための基本を、プログラミング初心者向けに噛み砕いて説明します。まずは概念 → 実際のコード → 実行イメージ → 注意点 → 練習問題(解答付き)という順に進めます。


1. まずイメージを掴もう

繰り返し(ループ)は「条件が満たされているうちは、同じ処理をずっと繰り返す」仕組みです。
家で例えると:「部屋の掃除をする → まだ床にゴミがある? → はいならもう一回掃除 → いいえなら終わり」という流れです。

While … Wend は「条件が True(真) の間だけ処理を繰り返す」タイプのループです。


2. 基本構文(覚え方はシンプル)

While 条件式
    繰り返したい処理
Wend
VB
  • 最初に 条件式 をチェックします。
  • True なら中の処理を実行 → 処理が終わったらまた 条件式 をチェック → False になったらループ終了。

3. とても簡単な例(動きを追ってみる)

Sub Example1()
    Dim i As Integer
    i = 1
    While i <= 5
        Debug.Print "i = " & i
        i = i + 1
    Wend
End Sub
VB

動作(手で追うと)

  • i = 1 → 条件 1 <= 5 は True → 出力 "i = 1" → i を 2 にする
  • i = 2 → 2 <= 5 True → 出力 "i = 2" → i を 3 にする
  • i = 6 → 6 <= 5 False → ループ終了

出力(イミディエイトウィンドウ)

i = 1
i = 2
i = 3
i = 4
i = 5

ポイント:ループ内で i(条件に関係する値)を必ず更新しているので、最終的に条件が False になり終了します。


4. 実用例:セルに値を書き込む(Excelでよく使うパターン)

Sheet の A1 から下に順に「1, 2, 3, …」と書き、10 まで書いたら止める例:

Sub FillCellsWhile()
    Dim r As Integer
    r = 1 ' 行番号(A1 -> 行1)
    While r <= 10
        Worksheets("Sheet1").Cells(r, 1).Value = r
        r = r + 1
    Wend
End Sub
VB

実行すると Sheet1 の A1:A10 に 1〜10 が入るよ。


5. While … Wend と Do … Loop の違い(初心者向け簡単まとめ)

  • While … Wend:構造がシンプル。条件 を先に判定して繰り返すタイプ(先判定ループ)。
  • Do … Loop:書き方が柔軟(条件をループの先・後どちらでも置ける)、Exit Do で途中脱出ができるなど便利。現場では Do … Loop を使うことが多いです。

例:後判定(少なくとも一回は実行したい)なら Do … Loop が使いやすい:

Do
    ' 処理
Loop While 条件
VB

6. 無限ループに注意(これが一番やらかすポイント)

無限ループとは「条件がずっと True のままで終わらない」状態。Excel が固まる原因になります。
例(危険):

Sub BadLoop()
    Dim n As Integer
    n = 1
    While n <= 5
        Debug.Print n
        ' n を増やす処理がない → ずっと n = 1 のまま → 終わらない
    Wend
End Sub
VB

対策

  • ループ内で必ず条件を変える(カウンタを増やす/セルの状態を変えるなど)。
  • デバッグ時は Debug.Print を使って何回ループしているかを確認する。
  • 万が一固まったら Excel のタスクを強制終了(最悪)する前に、小さいテストデータで試す。

7. 実用的な例題(ステップで説明)

例題 A:1〜100 の合計を求める

Sub SumTo100()
    Dim i As Integer
    Dim total As Long
    i = 1
    total = 0
    While i <= 100
        total = total + i
        i = i + 1
    Wend
    Debug.Print "合計 = " & total   ' 結果は 5050
End Sub
VB

動き:i を 1 から 100 まで増やしながら total に足す → 最後に 5050。


例題 B:ある値を超えるまで乱数を足していく(Do … Loop 版で便利)

目的:乱数(1〜10)を足して合計が 50 を超えたら終了し、何回足したかを出力する。

Sub RandomUntilOver50()
    Dim total As Integer
    Dim count As Integer
    Randomize
    total = 0
    count = 0
    Do
        total = total + Int((10 * Rnd) + 1)  ' 1〜10 の乱数
        count = count + 1
    Loop While total <= 50
    Debug.Print "合計 = " & total & ", 回数 = " & count
End Sub
VB

Do … Loop の利点:Loop While(後判定)で「少なくとも1回実行」したい場合に便利。


8. デバッグのコツ(初心者必須)

  • Debug.Print で変数の値を出力してループの挙動を確認する。
  • まずは小さな回数で試す(例:1000回とか怖いので 5 回で試す)。
  • 無限ループになりそうなら If を入れて安全弁を作る:
If count > 10000 Then Exit Sub
VB

9. 練習問題 — 解答付き

問題1:1〜20の偶数だけを Debug.Print する While を作れ。
解答1

Sub Q1()
    Dim i As Integer
    i = 1
    While i <= 20
        If i Mod 2 = 0 Then Debug.Print i
        i = i + 1
    Wend
End Sub
VB

問題2:A列に数字が入力されていて、空白セルが出てきたらループを終えて、合計を MsgBox で表示するコードを While で作れ。
解答2

Sub Q2()
    Dim r As Integer
    Dim s As Long
    r = 1
    s = 0
    While Worksheets("Sheet1").Cells(r, 1).Value <> ""
        s = s + Worksheets("Sheet1").Cells(r, 1).Value
        r = r + 1
    Wend
    MsgBox "合計=" & s
End Sub
VB

問題3:1 から始めて、数を 2 倍していき、1000 を越えたら何回倍したかを出力する。
解答3

Sub Q3()
    Dim n As Long
    Dim count As Integer
    n = 1
    count = 0
    While n <= 1000
        n = n * 2
        count = count + 1
    Wend
    Debug.Print "回数=" & count & ", 最終値=" & n
End Sub
VB

(上の例は記事の例と同じ考え方です)


まとめ(短く復習)

  • While … Wend は「条件が True の間繰り返す」シンプルなループ。
  • ループ内で必ず条件に影響する値を変更して、無限ループを避ける。
  • 実務では Do … Loop の方が柔軟でよく使われるが、While の動きは理解しておくこと。
  • デバッグは Debug.Print、小さなデータで試す、保険の Exit を入れるのがポイント。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました