はじめに:数字を使わないループ処理がある?
「プログラミングって、結局は数学の知識が必要なんでしょ?」
そう思って、学習を諦めかけてはいませんか? 実は、日々の事務作業を自動化するにあたって、高度な数学的知識を求められる場面はそれほど多くありません。
特に、データを一つずつ順番に処理する「ループ処理」には、数を数える手間さえ省ける非常に便利な手法が存在します。それが、今回詳しく解説する「For Each…Next文」です。
For Each文とは?:箱の中身を空になるまで取り出す
従来の「For…Next文(カウンター変数を用いる方式)」は、例えるなら「出席番号順に名前を呼ぶ」ような仕組みです。
「1番から30番まで」と範囲が固定されているため、もし人数が変動して31人になった場合、プログラム側の設定も書き換えなくてはなりません。この管理の手間が、思わぬ入力ミスを招く原因となります。
一方で「For Each…Next文」は、「箱の中身を一つ残らず取り出す」といったイメージで動作します。
「対象の集まり(コレクション)に含まれるすべての要素」に対して処理を自動実行するため、対象が10個であっても100個であっても、あるいは1つもなくても、私たちが数をカウントする必要はありません。
これなら、処理のたびに数を気にする心理的な負担もぐっと軽くなります。
実践!全シートのA1セルに「社外秘」と入れる
実務でよくあるのが、「ワークブック内にあるすべてのシートに対して、一括で同じ処理を施したい」というケースですよね。
シートが数枚程度なら手動でも対応できますが、50枚を超えたり、月ごとに枚数が変動したりする場合はどうでしょうか。想像するだけで気が滅入りますね。。。
そんな時こそ「For Each」の真価が発揮されます。以下のコードは、コピー&ペーストですぐに活用可能です。
Sub 全シートに社外秘スタンプ()
' 変数の宣言:wsという名前で「ワークシート」を入れる箱を用意
Dim ws As Worksheet
' このブックの「全てのワークシート」から、1枚ずつ「ws」に入れて処理する
For Each ws In ThisWorkbook.Worksheets
' ws(現在手に取っているシート)のA1セルに文字を入れる
ws.Range("A1").Value = "社外秘"
' 文字色を赤にする(装飾)
ws.Range("A1").Font.Color = vbRed
Next ws
MsgBox "全シートへの処理が完了しました!", vbInformation
End Sub
解説:ここがポイント
- For Each ws In ThisWorkbook.Worksheets:ここが核心です。「ワークシートの集まり(Worksheets)」から、一枚ずつ取り出して ws という仮の名前をつけて処理します。
- ws.Count などで枚数を数える記述が一切ありません。これなら、シートが増減してもコードを書き直す必要がありません。
応用:選択した範囲の「空白」だけを埋める
もう一つ、実務に役立つ応用例をご紹介しましょう。
Excelで選択している「範囲(Range)」も、一つの集まりとして扱うことが可能です。
「選択した範囲内の空白セルにのみ、一括でハイフン(-)を入れたい」という時も、For Eachなら鮮やかに解決できます。
Sub 選択範囲の空白を埋める()
Dim myCell As Range
' エラー回避:もしセルが選択されていなければ終了
If TypeName(Selection) <> "Range" Then
MsgBox "セルを選択してから実行してください", vbExclamation
Exit Sub
End If
' 選択された範囲(Selection)の中の、個々のセル(myCell)を順番に処理
For Each myCell In Selection
' もしそのセルが空白だったら
If myCell.Value = "" Then
myCell.Value = "-" ' ハイフンを入れる
myCell.Interior.Color = RGB(255, 255, 200) ' 薄い黄色で塗りつぶす
End If
Next myCell
MsgBox "空白セルの穴埋め完了です!", vbInformation
End Sub
まとめ:私たちはもう、数を数えなくていい
For Each文の魅力をご実感いただけたでしょうか。
- 数を数えないから、ミスが激減する。
- コードが簡潔になり、読み書きが楽になる。
- 対象が増減しても、メンテナンス作業が不要。
「文系だからプログラミングは苦手」と思い込む必要はありません。むしろ「単純な繰り返し作業はコンピュータに任せて楽をしたい」という気持ちこそが、上達に最も必要なものです。
まずは紹介したコードをコピーして、お手元のExcelでその便利さを体感してみてください!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント