【参加レポート】スパとふゆの0からはじめるExcelマクロ(2日目)~最強の武器「繰り返し処理」を学ぶ~

1. はじめに:プログラミングの核心「繰り返し処理」へ!

こんにちは!Excel VBAの便利さを日々探求している、毎日信金です。
今回も、「Excel-Fun.xls*」のコミュニティが主催する大人気講座「スパとふゆの0からはじめるExcelマクロ」(2025年07月25日開催)の2日目に参加してきました!講師の和風スパゲティさん(@wafu_spaghetti)と、私たち学習者の代表である生徒役のふゆさん(@id_mimipr)と一緒に、今回も楽しく学ぶことができました。
さて、この日のテーマは、プログラミング3大要素(変数・分岐・繰り返し)の最後の一つ、「繰り返し処理(ループ)」です。これこそが、Excel VBAの真価を発揮するための最強の武器!この機能をマスターすれば、これまで手作業でやっていた退屈な作業を一瞬で終わらせることができるようになります。考えるだけでワクワクしますね!
2. まずは復習から:変数・分岐処理と「インデント」の重要性
Sub 挨拶する()
Dim 挨拶
挨拶 = InputBox("挨拶して下さい")
If 挨拶 = "" Then
MsgBox "無視すんな"
ElseIf IsNumeric(挨拶) = True Then
MsgBox "日本語でおk"
Else
MsgBox 挨拶
End If
End Sub本題に入る前に、まずは1日目の復習からスタートしました。前回は、ユーザーの入力に応じてメッセージを変える「挨拶マクロ」を作りながら、「変数」と「分岐(If文)」について学びました。

また、F8キーを押して1行ずつマクロを実行する「ステップ実行」の方法も復習。ステップ実行中に変数の上にマウスカーソルを乗せると、その時点での中身を確認できるので、デバッグ(エラーの原因を探す作業)に非常に役立つテクニックです。
そして、和風スパゲティさんが「今回やるループはこれやらないとマジで頭が混乱していく」と特に強調していたのが「インデント(字下げ)」の重要性です。
TabキーやShift + Tabでコードを整形することで、If文やこれから学ぶFor文の「どこからどこまでが一つの処理ブロックなのか」を視覚的に分かりやすく整理できます。この「ブロックを意識する」という感覚が、後で出てくる二重ループをパニックにならずに読み解くための伏線だったとは、この時の私はまだ知る由もありませんでした。
3. 本題:For…Nextで「繰り返し処理」をマスターする

いよいよ、この日のメインテーマである「繰り返し処理」です。最初の演習は、「A1セルからA10セルに、1から10までの連番をマクロで入力する」というシンプルな課題でした。もちろん10個くらいなら手で入力したほうが早いですが、これが100個、1000個となったら…と考えると、マクロのありがたみが分かりますね。
For…Next構文の解説
Sub 連番を出力()
Dim i As Long
For i = 1 To 10
Range("A1").Value = i
Next
End Subこの課題を解決するのがFor...Nextステートメントです。基本的な構造は以下のようになっています。
Dim i As Long:iという名前の整数を入れるための変数を宣言。For i = 1 To 10: 変数iの値を1からスタートし、1ずつ増やしながら10になるまで、間の処理を繰り返すという命令です。Next: ここまで処理が終わったら、Forに戻ってもう一度処理を続けてください、という命令です。iの値が10を超えると、ループを抜けてNextの次の行に進みます。
このコードの動きを理解する一番の近道は、前回習ったF8キーでのステップ実行です。Forの行を通過した瞬間に変数iの上にカーソルを乗せると1が入っているのが見え、Nextを通過するとForに戻り、今度はiが2に変わります。この「カウンタ変数が1ずつ増えながら、ForとNextの間をぐるぐる回る」様子を自分の目で追うことが、ループ処理を体で覚えるための最も確実な方法です。
セルの指定方法:3つのアプローチと比較
ループ処理のキモは、繰り返しのたびに処理対象のセルの位置を動的に変えていくことです。講座では、そのための3つの方法が紹介されました。
方法1:文字列結合 Range("A" & i)
Sub 連番を出力_文字列結合()
Dim i As Long
For i = 1 To 10
Range("A" & i).Value = i
Next
End Sub&記号を使って、「A」という文字と変数iの値を結合する方法です。iが1の時はRange("A1")、2の時はRange("A2")…というように、ループの進行に合わせてセル番地を文字列として組み立てます。Excelの関数に慣れている人には馴染みやすい方法かもしれません。
方法2:Offset(参考)
Sub 連番を出力_Offset()
Dim i As Long
For i = 1 To 10
Range("A1").Offset(i - 1, 0).Value = i
Next
End SubRange("A1").Offset(i - 1, 0)のように、基準となるセルからの相対位置でセルを指定する方法です。ここで面白い「生きたデバッグ」の場面がありました。
最初、講師はOffset(i, 0)とコードを書き、実行しました。すると、処理はA2セルから始まってしまったのです。なぜなら、iが1の時に「A1セルから1行下にズレたセル」を指してしまったから。そこで、「最初のi=1の時はズレてほしくない(0がいい)から、i - 1にすればいいんだ!」と、その場で修正。この試行錯誤のプロセスは、まさにプログラミングの思考そのもので、非常に勉強になりました。
方法3:Cells(推奨) Cells(i, 1)

Sub 連番を縦に出力()
Rem 変数名は自分がわかりやすいものでOK
Rem 「i」⇒「行」にするとわかりやすさUP!
'Dim i As Long
Dim 行 As Long
'For i = 1 To 10
For 行 = 1 To 10
'Cells(i, 1).Value = i
Cells(行, 1).Value = 行
Next
End SubSub 連番を横に出力()
Rem 変数名は自分がわかりやすいものでOK
Rem 「i」⇒「列」にするとわかりやすさUP!
'Dim i As Long
Dim 列 As Long
'For i = 1 To 10
For 列 = 1 To 10
'Cells(1, i).Value = i
Cells(1, 列).Value = 列
Next
End Subそして、講師の和風スパゲティさんが「マクロとしてはこっちの方がよく使う」「ループ処理の時に非常に便利」と最も推奨していたのが、Cellsプロパティを使う方法です。
CellsはCells(行番号, 列番号)のように、行と列を両方とも数値で指定できます。Cells(i, 1)と書けば、変数iを使って縦方向(A列)に処理を繰り返せます。
このCellsの真価が発揮されたのは、「横方向に連番を出力する」という次の課題でした。Range("A" & i)の方法では、Aの次をB、Bの次をC…とアルファベットを変えていくロジックを組む必要があり、講師のスパさんも「これ、書けなくない? Aだからさ…すぐには思いつかなくないですか」と問いかけます。本当にその通りで、すぐには思いつきません。
しかしCellsなら、Cells(1, i)と書くだけ。たったこれだけで、「1行目のi列目」を順に処理できるのです。この柔軟性こそ、繰り返し処理と抜群に相性が良い理由なのだと、目から鱗が落ちる思いでした。
4. 応用編:二重ループで「九九の表」を作成する

講座のクライマックスは、最大の難関ともいえる「二重ループ」でした。これはFor文の中に、さらにFor文を入れる入れ子構造のことで、これを使って「九九の表」を作成しました。
ここで和風スパゲティさんから、コードの可読性を上げるための重要なヒントがありました。ループでよく使われるiという変数名は便利ですが、処理が複雑になると何をしているか分からなくなりがちです。そこで、iをR (Row)、そして最終的には日本語の行と列に書き換えることで、「どのループが何を担当しているか」が一目瞭然になりました。これは、未来の自分がコードを読み返す時に必ず感謝するテクニックですね。
完成コード
Sub 九九を計算()
Dim 行 As Long
For 行 = 1 To 9
Dim 列 As Long
For 列 = 1 To 9
Cells(行, 列).Value = 行 * 列
Next
Next
End Sub動作のロジック説明

このコードの動きは少し複雑ですが、講師は「外側のループ(行)が1の時、内側のループ(列)が1から9まで一気に回る。それが終わると、外側のループの行が2になり、また内側のループが1から9まで回る」と解説してくれました。
もう少し具体的に分解すると、こういうことです。
外側のループが始まります(行 = 1)。内側のループが1から9まで一気に実行されます(列 = 1, 2, 3...9)。これにより、Excelシートの1行目に1の段が完成します。内側のループが完了すると、外側のNextに到達し、行がインクリメントされます(行 = 2)。再び、内側のループが1から9まで実行されます。今度は2行目に2の段が書き込まれます。このプロセスが、行が9になるまで繰り返されます。
学習者としての共感
正直、Forの中にForを入れると聞いた瞬間は頭が真っ白になりかけました。でも、和風スパゲティさんが「九九だとやっていることがイメージしやすい」と言った通り、一つ一つの計算結果がシートに埋まっていくのを見ると、「ああ、なるほど!外側のループが行を、内側のループが列を動かしているのか!」と、点と点がつながる感覚がありました。この、難しいロジックが身近な例で腑に落ちる瞬間こそ、プログラミング学習の醍醐味ですね。
5. まとめ:繰り返し処理こそVBAの真価
今回の講座で学んだことは、Excel VBAの力を解放するための重要な鍵でした。
セッションの要点

- 繰り返し処理の基本:
For...Next文を使うことで、同じような処理を何度も自動で実行できることを学びました。 Cellsプロパティの有用性: ループ処理ではCells(行, 列)を使うと、縦方向・横方向どちらの繰り返し処理もシンプルに書けて非常に便利です。- 二重ループの概念: ループを組み合わせる(入れ子にする)ことで、九九の表のような二次元のデータも効率的に扱えるようになります。
最後に、和風スパゲティさんが語った言葉が印象的でした。 「『全てのブックに対して』『全てのシートに対して』といった処理ができるようになり、マクロを使う意味が大きく出てくる」
単一のシートでの作業なら関数でも十分なことが多いですが、複数のファイルやシートにまたがる大量の定型作業を一括で処理できることこそ、VBAの真骨頂です。「繰り返し処理」は、その自動化への大きな一歩なのだと改めて感じました。



