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 <= 5True → 出力"i = 2"→ i を 3 にする - …
- i = 6 →
6 <= 5False → ループ終了
出力(イミディエイトウィンドウ)
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 条件
VB6. 無限ループに注意(これが一番やらかすポイント)
無限ループとは「条件がずっと 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
VBDo … Loop の利点:Loop While(後判定)で「少なくとも1回実行」したい場合に便利。
8. デバッグのコツ(初心者必須)
Debug.Printで変数の値を出力してループの挙動を確認する。- まずは小さな回数で試す(例:1000回とか怖いので 5 回で試す)。
- 無限ループになりそうなら
Ifを入れて安全弁を作る:
If count > 10000 Then Exit Sub
VB9. 練習問題 — 解答付き
問題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を入れるのがポイント。
