「また数え間違えた…」と落ち込む必要はありません。数字を意識しない魔法のループ「For Each」をマスターしましょう

【業務効率化】VBA
スポンサーリンク

はじめに:数字を使わないループ処理がある?

プログラミングって、結局は数学の知識が必要なんでしょ?

そう思って、学習を諦めかけてはいませんか? 実は、日々の事務作業を自動化するにあたって、高度な数学的知識を求められる場面はそれほど多くありません。

特に、データを一つずつ順番に処理する「ループ処理」には、数を数える手間さえ省ける非常に便利な手法が存在します。それが、今回詳しく解説する「For Each…Next文」です。

【業務効率化】VBAの記事を見る

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の記事を見る


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました