「100人分の請求書を1枚ずつ作る…」
「1,000行あるデータの空欄を一つずつチェックする…」
そんなとき、「何回同じことやってるんだろう…」と遠い目になりますよね。
実は、プログラミングが一番得意なのは「単純な繰り返し」です。
人間なら1時間かかる作業も、VBAなら1秒で終わります。
そのための魔法の言葉が、今回学習する 「For Next(フォー・ネクスト)」 です!
これさえ覚えれば、あなたはもう「カチカチ」と同じクリックを繰り返す必要はありません。
ボタン1つ押せば、何もする間なく一瞬で100件の繰り返しが完了します。

繰り返し処理といえば
・For Next
・Do While Loop
の2つがあるよ!
For Nextは回数を条件として繰り返し
一方、Do Whileは条件を満たすまで繰り返します。
For Nextの方が利用頻度が多いため
まずはFor Nextを極めよう!

For Next文は「決まった回数、同じ処理を繰り返す」
繰り返し処理の基本となるのは For Next 文です。
これは、特定の作業を「何回から何回まで」繰り返すかの指示です。
For Nextの基本構造
For〜To: 「〜から〜まで」繰り返す回数を設定Next: 「次の回に進め!」という命令
For 変数名 = 開始番号 To 終了番号
' 【ここが処理したい内容】
' このブロック内のコードが繰り返される
Next 変数名
【実例:5回繰り返す】
Sub GoKaiKurikaesu()
Dim i As Integer ' i というカウンター変数を用意
For i = 1 To 5
MsgBox i & "回目の繰り返しです"
Next i
End Sub
このマクロを実行すると、メッセージボックスが「1回目」から「5回目」まで表示されます。


最初は理解しにくいかも。
でもとても便利だし、コードも短くなるよ!
もしFor Nextを使わないとしたら
・MsgBox “1回目の繰り返しです”
・MsgBox “2回目の繰り返しです”
・MsgBox “3回目の繰り返しです”
・MsgBox. “4回目の繰り返しです”
・MsgBox “5回目の繰り返しです”
って5行同じようなことを書かないといけないよ…
Range一本槍戦略の集大成!行を自動で動かす
この「繰り返しカウンター」を、以前学んだRange("A" & i)と組み合わせることで
セル操作の自動化が完成します。
変数 i を「行番号」として使うのがポイントです。
【例題:A列のデータをB列にコピーする】
データが2行目から何行目まであるか分からない(毎回バラバラ)状況を想定します。

行数が分かっている(毎回固定)なら
変数を利用してまで最終行の取得は不要になるよ。
Sub 行を自動で動かす()
Dim i As Long ' 行番号用のカウンター変数
Dim lastRow As Long ' 最終行を変数に格納
' 1. 最終行を自動で取得する(第10回のおまじない)
lastRow = Range("A" & Rows.Count).End(xlUp).Row
' 2. 2行目から最終行まで繰り返す
For i = 2 To lastRow
' 3. 処理を実行(A列のi行目 の値を B列のi行目に入れる)
Range("B" & i).Value = Range("A" & i).Value
' 4. 条件分岐を組み合わせる
If Range("A" & i).Value > 100 Then
Range("B" & i).Interior.Color = vbYellow ' 円超なら黄色に
End If
Next i
MsgBox "全 " & lastRow - 1 & "件の処理が完了しました。"
End Sub
このコードは、たった数行で1万行あろうと、自動でデータの最終行まで処理を終わらせます。これがマクロの最も基本的な、そして最も強力な使い方です。


繰り返し処理を条件分岐させられるよ!
今まで学習してきたことを組み合わせるだけで
どんな業務にも対応できるようになるんだ。
10秒かかる処理を1秒にする「画面描画の停止」
大量のデータを処理する際に、マクロを劇的に高速化させる裏技があります。
それは、マクロが動作中に画面の更新(描画)を一時的に止めることです。
マクロがセルに値を書き込むたびに画面が更新されるため、これが処理速度を遅くする最大の原因になります。
マクロの最初に以下のコードを挿入するだけで、画面のチラつきがなくなり、処理速度が何倍も向上します。

このコードは毎回導入してもいいくらい便利!
マクロの動作なんて早ければ早いほど良いんだから。
処理の高速化テクニック
Sub 高速処理マクロ()
' ▼ 速度UP!画面の更新を停止
Application.ScreenUpdating = False
' [ここに大量のデータ処理コードを記述]
' ▲ 速度UP!画面の更新を元に戻す(最重要!)
Application.ScreenUpdating = True
End Sub

Application.ScreenUpdating = True
これは絶対に忘れないで!
これを忘れてマクロを完了させると
エクセルの挙動がおかしくなることがあるんだ。
今回のクエストを終えて
For i = 開始 To 終了 Next iで処理を繰り返す。- 変数
iをRange("A" & i)の行番号として使うのがマクロの基本。 For Nextを使う前に、End(xlUp).Rowで最終行を必ず取得すること。- 大量処理の際は、
Application.ScreenUpdating = Falseで画面描画を停止し、高速化する。
これで、あなたはマクロを「特定の行」から「大量のデータ全体」へとスケールアップさせる技術を習得しました。
次回は、「オートフィルタと並べ替え」です。
データ分析の定番操作を自動化し、マクロをさらに実用的なものに仕上げていきましょう!





コメント