【2026年8月最新】VBAのFor Each文とは?配列・コレクション・Selectionをループ処理する使い方をやさしく解説

【2026年7月最新】VBAのFor Each文とは?配列・コレクション・Selectionをループ処理する使い方をやさしく解説

「Excel VBAのマクロを見ていたら、For Eachという見慣れない書き方が出てきた」「配列やコレクションを1件ずつ処理したいけれど、For Nextとどう違うのか分からない」——経理・総務・営業事務の現場で、こうした疑問にぶつかる方は少なくありません。

For Eachステートメントは、Excel VBAで配列・シート・選択セル範囲・フォルダ内ファイルなど「複数の要素の集まり」を1件ずつ自動で処理するための構文です。件数を数える必要がなく、書き方も比較的シンプルなため、VBA入門者が最初につまずきやすい一方で、覚えてしまえば非常に汎用性の高い道具になります。

この記事では、For Eachの基本構文から、配列・Selection・Worksheetsコレクション・フォルダ内ファイル一覧の取得まで、実務でよく使う4つの使い方を整理します。さらに後半では、弊社(株式会社GENAI)の実運用データをもとに、「そもそもVBAのループ処理を書かなくても、AIに日本語で指示するだけで同じことができる」という選択肢についても紹介します。

代表菅澤 代表菅澤
For Eachは「リストに並んでいる中身を、頭から順番に全部チェックしてください」という業務指示に近い構文です。件数が変わっても書き直す必要がないので、一度覚えると応用範囲がとても広いんです。
AI鬼管理山崎 AI鬼管理山崎
今日は配列・Selection・シート・フォルダ内ファイルという4つの実務パターンを、コード例つきで整理していきます。VBAを書く予定がない方も、後半の「AIならコードなしで同じことができる」という話まで読んでいただくと、選択肢が広がるはずです。

この記事を最後まで読むと、次の6つが明確になります。

✔️For Eachの基本構文と、配列を1件ずつ処理する書き方
✔️For Nextとの使い分けと、For Eachで逆順ループができない理由
✔️Selection(選択セル範囲)を1セルずつ処理する方法
✔️Worksheets・Workbooksコレクションをループで扱う方法
✔️フォルダ内のファイル名をFileSystemObjectと組み合わせて一括取得する応用
✔️VBAを書かずにAIで同じ処理を実現するという、非エンジニア向けの選択肢
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理
📌 この記事の結論
【2026年8月最新】VBAのFor Each文とは?配列・コレクション・Selectionをループ処理する使い方をやさしく解説
VBAのFor Each文の使い方を、配列・Selection・Worksheetsコレクション・フォルダ内ファイル取得まで整理。逆順ループができない理由から、AIならコードなしで同じ処理ができる理由まで解説します。

01 For Eachステートメントとは何か VBAのループ処理の中でも「集まりを丸ごと処理する」ための構文

Excel VBAで「同じ処理を繰り返す」ための構文(ステートメント)には、代表的なものが2種類あります。1つは件数(インデックス番号)を指定して回すFor...Next、もう1つが今回解説するFor Each...Nextです。

📚 用語解説

VBA (Visual Basic for Applications):Excel・Word・AccessなどMicrosoft Office製品に組み込まれているプログラミング言語。マクロと呼ばれる自動処理を作成するために使われます。Officeさえあれば追加インストールなしで使える手軽さから、経理・総務・営業事務など非エンジニア職種でも古くから利用されてきました。

📚 用語解説

ステートメント:プログラミング言語における「命令文」の単位。VBAではFor EachIfのように、決まったキーワードで始まる命令のかたまりをステートメントと呼びます。日本語で言えば「〜せよ」という1つの業務指示に相当します。

For Eachの最大の特徴は、「対象がいくつあるか」を自分で数える必要がないという点です。配列の要素数やフォルダ内のファイル数が実行のたびに変わっても、コードを一切修正せずに、集まりの中身を先頭から最後まで自動で1つずつ処理してくれます。

For Eachが処理できる対象は、大きく分けて次の3種類です。

対象具体例本記事での解説箇所
配列Dim arr(2) As String などで宣言した配列第2章
オブジェクトの集まり(コレクション)Worksheets・Workbooks・Selection・Files など第3〜5章
独自に作成したCollectionオブジェクトCollectionクラスで自作したデータの集まり第2章

📚 用語解説

コレクション:同じ種類のオブジェクトをまとめて管理する「入れ物」のこと。VBAでは、開いているシート全部をまとめたWorksheets、開いているブック全部をまとめたWorkbooksなど、あらかじめ用意されたコレクションが数多く存在します。For Eachはこのコレクションと非常に相性のよい構文です。

💡 For Eachを使うべき典型的な場面

「配列やシートが何個あるか分からないが、全部に同じ処理をしたい」というときはFor Eachの出番です。逆に「3番目の要素だけ処理したい」「番号を使って計算したい」という場合はFor Nextの方が適しています(詳しくは第2章で解説します)。

AI鬼管理山崎 AI鬼管理山崎
For Eachは英語で読むと「For(〜について) Each(それぞれ)」、つまり「それぞれについて処理する」という意味そのままです。日本語のマニュアルより、英語の意味から理解した方がしっくりくる方も多いです。

02 基本構文と配列操作・For Nextとの使い分け 配列を1周する基本形から、逆順ループができない理由まで

まずはFor Eachの基本構文を見てみましょう。配列の中身を順番に処理する、もっとも基本的な形です。

Sub SampleForEachArray()
    Dim fruits(2) As String
    Dim item As Variant

    fruits(0) = "りんご"
    fruits(1) = "みかん"
    fruits(2) = "ぶどう"

    For Each item In fruits
        Debug.Print item
    Next item
End Sub

構文はFor Each 変数 In 対象で始まり、Next 変数で終わります。ここでのitemは「ループ変数」と呼ばれ、対象(この例では配列fruits)の中身が1つずつ順番に代入されていきます。配列の要素数をUBound関数などで数える必要が一切ない点が、通常のFor文との大きな違いです。

2-1. ループ変数の型はVariantにしておくのが安全

For Eachのループ変数は、対象の中身に合わせて型を柔軟に受け取れるVariant型で宣言するのが基本です。配列が文字列ならString型でも動きますが、オブジェクトのコレクション(Worksheetsなど)を処理する場合は、対象のオブジェクト型(WorksheetやRangeなど)またはVariant型で宣言する必要があります。

2-2. For Nextとの使い分け

For NextとFor Eachは、どちらも「繰り返し処理」を行う点は共通していますが、得意な場面がはっきり分かれています。

観点For NextFor Each
何を指定するか開始番号・終了番号(インデックス)対象の集まり(配列・コレクション)そのもの
件数の把握事前に件数(UBoundなど)が必要な場合が多い不要。集まりの中身を自動で全部処理
要素番号の利用◎ i番目という情報を計算に使える△ 標準では要素番号を直接扱えない
逆順ループ◎ Step -1 で簡単に対応可能× 標準では非対応(後述)
向いている場面番号を使った計算・特定範囲だけの処理集まり全体に同じ処理を一律で行いたいとき

たとえば「3番目から5番目の要素だけを処理したい」「要素番号を使って別の配列と突き合わせたい」といった、番号そのものに意味がある処理ではFor Nextが適しています。一方、「集まりの中身全部に同じ処理をしたいだけ」で番号自体には意味がない場合は、コードがシンプルになるFor Eachの方が読みやすくなります。

2-3. 逆順でループを回すには?(For Eachの制約)

ここでよくある誤解が、「For Eachでも逆順に処理できるのでは」というものです。結論から言うと、For Eachには逆順に処理するための標準的な機能(Stepオプション)が存在しません。For NextであればStep -1を指定するだけで簡単に逆順ループが組めますが、For Eachには同等の指定方法が用意されていないのです。

' For Nextなら逆順は簡単
Dim i As Long
For i = UBound(fruits) To LBound(fruits) Step -1
    Debug.Print fruits(i)
Next i

' For Eachには Step 相当の指定がない(逆順不可)
⚠️ 配列の要素を削除しながらFor Eachで回すのは危険

配列の要素数を変えながら(削除しながら)For Eachでループを回すと、内部で管理している要素の位置がずれて、想定外の要素をスキップしたり、エラーが発生したりすることがあります。要素を削除しながら処理したい場合は、後ろから前に向かって処理できるFor Next(Step -1)を使うのが安全です。

つまり、「逆順に処理したい」「要素を削除しながら処理したい」というケースでは、For Eachではなく素直にFor Nextを使うのが正解です。For Eachはあくまで「順番を問わず、集まり全体に同じ処理を行いたいとき」に向いた構文だと覚えておきましょう。

代表菅澤 代表菅澤
「For Eachで逆順にできないか」という質問は、弊社が過去に受けたVBA関連のご相談でも実際に何度か出てきました。無理にFor Eachで頑張ろうとせず、素直にFor Nextに切り替える判断も大切です。

03 Selectionを1セルずつ操作する方法 ユーザーが選択した範囲を、For Eachで自動処理する

📚 用語解説

Selection:Excelの画面上で、ユーザーが現在マウスやキーボードで選択しているセル範囲・図形・グラフなどを表すオブジェクト。マクロ実行時にどこが選ばれているかによって内容が変わる「動的な対象」である点が特徴です。

「選択した範囲だけを一括で処理したい」という要望は、経理・営業事務の現場で非常によく出てきます。For Eachを使えば、選択されているセルが何個あっても、コードを変えずに1セルずつ同じ処理を実行できます。

Sub SampleForEachSelection()
    Dim cell As Range

    For Each cell In Selection
        If IsNumeric(cell.Value) And Not IsEmpty(cell.Value) Then
            cell.Value = cell.Value * 1.1
        End If
    Next cell
End Sub

この例では、選択範囲の中の数値が入っているセルだけを1.1倍にしています。あらかじめ「選択範囲は何行何列か」を調べる必要がなく、ユーザーがどんな範囲を選んでも同じマクロで対応できるのが、Selectionをループ処理する最大のメリットです。なお、VBAのIsNumeric関数は空セル(Empty)に対してもTrueを返すため、条件をIsNumeric(cell.Value)だけにすると空セルまで0×1.1として書き換えてしまいます。空セルを除外するには、上記コードのようにAnd Not IsEmpty(cell.Value)を条件に加えます。

3-1. 複数範囲(離れたセル)を選択している場合

Ctrlキーを押しながら複数の離れた範囲を選択している場合でも、For Each cell In Selectionと書くだけで、すべての範囲にまたがる全セルを順番に処理できます。範囲ごとにコードを分ける必要がなく、選択がどれだけ複雑な形になっていてもFor Eachが自動的に1セルずつ拾ってくれます。

💡 Selectionの前に対象を確認する癖をつける

Selectionはユーザーの操作次第で内容が変わるため、「セルが1つも選ばれていない」「シート以外(グラフなど)が選ばれている」という状態で実行されるとエラーになることがあります。マクロの冒頭でIf TypeName(Selection) <> "Range" Then Exit Subのようなチェックを入れておくと安全です。

3-2. SelectionとActiveSheet.UsedRangeの違い

似た用途で使われるものにActiveSheet.UsedRange(シート内でデータが入力されている全範囲)があります。Selectionはユーザーが今選んでいる範囲、UsedRangeはシート上でデータが存在する範囲全体という違いがあり、目的に応じて使い分けが必要です。「毎回同じ範囲を自動で処理したい」ならUsedRange、「ユーザーが選んだ範囲だけ処理したい」ならSelectionが適しています。

⚠️ Selectionを使うマクロはボタン実行前提で設計する

Selectionはマクロ実行時点でのアクティブな選択状態に依存するため、他のプロシージャから呼び出したり、自動実行(イベントマクロ)で使ったりすると、意図しない範囲が対象になることがあります。基本的には「ユーザーがボタンを押して実行する」用途に限定して設計するのが安全です。

AI鬼管理山崎 AI鬼管理山崎
Selectionを使ったマクロは便利な反面、「今何が選ばれているか」に処理結果が左右されるので、複数人で使う社内マクロだと事故が起きやすい部分でもあります。範囲を固定できるならUsedRangeや名前付き範囲に切り替える方が安定します。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

04 Worksheets・Workbooksコレクションの操作 シート・ブック単位でまとめて処理する

📚 用語解説

オブジェクト:VBAで操作の対象となる「モノ」の総称。1枚のシートはWorksheetオブジェクト、1つのセルはRangeオブジェクト、1冊のブックはWorkbookオブジェクトとして扱われます。For Eachは、こうしたオブジェクトが複数集まったコレクションを処理するのが得意です。

複数のシートに同じ処理を行いたい場合は、WorksheetsコレクションをFor Eachでループします。

Sub SampleForEachWorksheets()
    Dim ws As Worksheet

    For Each ws In Worksheets
        ws.Range("A1").Value = "処理済"
        Debug.Print ws.Name & " を処理しました"
    Next ws
End Sub

4-1. Worksheetsコレクションの注意点

Worksheetsコレクションには、非表示になっているシートも含まれます。「見えているシートだけ処理したい」場合は、For Eachのループ内でws.Visibleプロパティを判定し、非表示シートをスキップする処理を追加する必要があります。

✔️Worksheetsには、表示・非表示を問わず全てのワークシートが含まれる
✔️グラフシートはWorksheetsには含まれず、全種類のシートを扱いたい場合はSheetsコレクションを使う
✔️ws.Visible = xlSheetVisibleで表示状態を判定できる
✔️シート名を変更・削除しながらループすると、対象がずれる場合があるため注意する

4-2. Workbooksコレクション(複数ブックの一括処理)

同時に開いている複数のExcelブックに対して同じ処理をしたい場合は、WorkbooksコレクションをFor Eachで処理します。

Sub SampleForEachWorkbooks()
    Dim wb As Workbook

    For Each wb In Workbooks
        Debug.Print wb.Name & " / 保存済み: " & wb.Saved
    Next wb
End Sub

この構文は、複数の集計ブックをまとめて上書き保存したい開いている全ブックの保存状態をチェックしたいといった、月次処理・締め作業でよく使われるパターンです。

💡 コレクションを操作するときは中身を数えてから実行すると安全

Worksheets.CountWorkbooks.Countで事前に対象の件数を確認し、想定通りの件数かログに出力しておくと、「意図しないシート・ブックまで処理してしまった」という事故を未然に防げます。

代表菅澤 代表菅澤
複数シート・複数ブックをまたぐ処理は、「動いているように見えて、実は一部のシートだけ抜け落ちていた」という事故が起きやすい領域です。For Eachで対象を網羅的に処理できることは、逆に言えば範囲の誤りにも気づきにくいという側面があります。

05 【応用】フォルダ内ファイルを一括取得する FileSystemObjectと組み合わせて、ファイル単位のループ処理を行う

📚 用語解説

FileSystemObject (FSO):Windowsのファイル・フォルダを操作するためのオブジェクト。VBA標準の機能ではなく、Microsoft Scripting Runtimeという外部ライブラリが提供する機能です。ファイル一覧の取得・コピー・削除・存在チェックなど、Excel VBA単体より高機能なファイル操作ができます。

For Eachは配列やシートだけでなく、フォルダの中にあるファイルの集まりにも使えます。ここではFileSystemObjectと組み合わせて、フォルダ内の全ファイル名を取得する例を紹介します。

Sub SampleForEachFiles()
    Dim fso As Object
    Dim folder As Object
    Dim file As Object

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder("C:\請求書")

    For Each file In folder.Files
        Debug.Print file.Name & " / 更新日: " & file.DateLastModified
    Next file
End Sub

📚 用語解説

後期バインディング (CreateObject):事前に「参照設定」でライブラリを登録しなくても、実行時にCreateObject("Scripting.FileSystemObject")のようにオブジェクトを生成する方法。上記コード例のようにObject型で宣言して後期バインディングを使うと、参照設定の登録漏れによる「別のPCでは動かない」というトラブルを避けやすくなります。

5-1. 参照設定を使う「早期バインディング」との違い

FileSystemObjectを使うには、VBEの「ツール」→「参照設定」からMicrosoft Scripting Runtimeを有効にする「早期バインディング」という方法もあります。早期バインディングは入力補完が効いて書きやすい反面、参照設定が有効になっていない別のPCでマクロを開くとエラーになるという弱点があります。社内で複数人がマクロを共有する場合は、コード例のようにObject型で宣言する後期バインディングの方がトラブルが起きにくく安全です。

5-2. サブフォルダの中まで取得したい場合

上記のコード例は1階層分のファイルのみが対象です。サブフォルダの中身まで含めて全ファイルを取得したい場合は、folder.SubFoldersプロパティをFor Eachでループし、自分自身のプロシージャを再帰的に呼び出す処理が必要になります。

1. フォルダを取得
GetFolderで
対象フォルダを指定
2. Filesをループ
For Eachで
ファイルを1件ずつ処理
3. 必要ならSubFoldersも
サブフォルダは
再帰処理で対応
✔️FileSystemObjectは標準機能ではなく、Microsoft Scripting Runtimeが提供する機能
✔️参照設定(早期バインディング)よりCreateObject(後期バインディング)の方が環境差の事故が少ない
✔️folder.Filesは1階層分のみ。サブフォルダの中身はSubFoldersで別途処理する
✔️ネットワークドライブのパスは、実行するPCによってドライブ文字が変わる場合があるため注意する
⚠️ 大量ファイルのフォルダでは処理時間に注意

フォルダ内に数千件単位のファイルがある場合、For Eachでの逐次処理はそれなりの時間がかかります。処理件数が多い場合は、進捗をApplication.StatusBarに表示するなどして、マクロが固まっていないことをユーザーに伝える工夫があると親切です。

AI鬼管理山崎 AI鬼管理山崎
ここまでの内容を一通り実装できれば、For Eachを使った配列・Selection・コレクション・ファイル操作は実務レベルで一通りカバーできます。ただ、こうした「参照設定・後期バインディング・再帰処理」まで含めたマクロを、非エンジニアの方が一人で完成させるのは、正直かなりの学習コストがかかるのも事実です。

06 【独自データ】繰り返し処理の自動化とAI移行の実際 For Eachで書いていたような「集まりを1件ずつ処理する」作業を、AIはどう扱うか

ここからは弊社(株式会社GENAI)の実データをもとに、「VBAのFor Eachで書くような繰り返し処理」と「AIによる自動化」を比較します。For Eachは非常に便利な構文ですが、こうしたループ処理を伴うマクロには、運用が長期化すると特有の課題が出てくることも事実です。

6-1. For Each系マクロが抱えがちな運用課題

弊社がこれまでに複数の企業様のマクロ資産を拝見してきた中で、For Eachを使った「一括処理系」のマクロで共通して見られる課題が以下の3つです。

✔️対象の追加・変更に弱い: 「新しいシートの種類が増えた」「Selectionの想定パターンが変わった」ときに、条件分岐の追加が必要になる
✔️属人化: 早期バインディングか後期バインディングか、参照設定の有無など、細かい実装判断が担当者の頭の中にしかない
✔️エラー処理の考慮漏れ: 「Selectionが空だった」「フォルダが存在しなかった」など、想定外の入力に対するチェックが後回しになりやすい

こうした課題は、For Eachという構文そのものの欠陥ではなく、「集まりを1件ずつ処理する」という自動化の性質上、対象の形が変わるたびに調整が必要になるという構造的な問題です。

6-2. 弊社での実運用: Claude Codeによる一括処理の自動化

弊社では、Claude Code(Anthropic社のAIエージェント)を使って、経理・秘書業務・開発など幅広い業務にAIを組み込んでいます。Max 20xプラン(月額$200・約30,000円)を全社契約し、For Eachでループ処理を書く代わりに日本語で指示するだけの一括処理タスクを日常的に処理しています。

項目内容
契約プランClaude Max 20x(月$200 / 約30,000円)
利用開始2025年後半〜
利用部署経営・営業・広告・開発・経理・秘書業務・個人業務まで全社
一括処理系の用途例複数シートの集計・選択範囲のデータ整形・フォルダ内ファイルの一括リネームや振り分け

特に経理業務では、請求書チェック・経費仕訳・freee連携などの処理で月40時間 → 月5時間まで作業時間が圧縮できている肌感です(あくまで弊社での概算値です)。従来はFor Eachを使ったマクロで複数シート・複数ファイルを一括処理していたような作業の多くも、この削減効果に含まれています。

⚠️ 数値の注意書き

上記は弊社の肌感ベースの数値であり、業種・業態・既存のマクロ資産の複雑さによって効果は変動します。「VBAを完全に廃止すべき」という主張ではなく、あくまで選択肢の一つとしてご覧ください。

6-3. VBAとAI、両方を使い分ける現実解

誤解してほしくないのは、「For EachもVBAももう不要」という話ではないという点です。すでに安定稼働しているマクロを無理に置き換える必要はありません。弊社の実運用でも、以下のような使い分けをしています。

既存の安定マクロ
そのまま維持
(無理に置き換えない)
対象の形が
頻繁に変わる処理

AIに条件を伝えて
その場で対応
新規の
一括処理業務

最初からAIに
日本語で指示
代表菅澤 代表菅澤
「動いているマクロは触らない」が鉄則です。ただ、対象のシート数やファイルの種類が頻繁に変わる処理ほど、For Eachの条件分岐がどんどん複雑になっていきます。そういう「変化に弱い処理」から、AIへの移行を検討する価値があると感じています。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

07 非エンジニアがFor Eachを書かずにAIで実現する3ステップ VBAが書けなくても、日本語で指示するだけで一括処理ができる

「For Eachの構文は分かったけれど、Selection・コレクション・FileSystemObjectを組み合わせたコードを自分で書くのは難しい」という方も多いはずです。ここでは、プログラミング未経験の方が、AI(Claude Code)を使って一括処理を自動化するまでの流れを3ステップで紹介します。

ステップ1: 「1件ずつ何をしたいか」を日本語でそのまま伝える

最初のステップは、VBAのように「For EachかFor Nextか」「配列かコレクションか」を選ぶ必要が一切ないという点です。「この選択範囲の数値セルだけ1.1倍にして」「このフォルダにあるファイルを全部、更新日と一緒に一覧にして」といった、普段使っている言葉のまま指示するだけで処理が実行されます。

💡 最初に試すべき指示の例

「選択したセル範囲の中で、数値が入っているセルだけを1.1倍にして」——この一文だけで、VBAでいうところのFor Eachによるセルのループ処理・IsNumericによる判定が、コードを書かずに実行されます。

ステップ2: 結果を確認し、条件を追加で伝える

VBAであれば「対象シートの条件を1つ追加する」だけでもFor Eachのループ内に分岐コードの追加が発生しますが、AIに指示する場合は会話の続きで条件を足すだけです。「非表示シートは除外して」「拡張子が.xlsmのファイルだけに絞って」といった追加条件も、その場で反映されます。

ステップ3: 定型業務として繰り返し使えるようにする

毎週・毎月など定期的に発生する一括処理であれば、指示の流れをそのまま繰り返し使えるパターンとして保存しておけます。これにより、担当者が変わってもFor Eachのコードを読み解く必要がなく、業務手順書を見ながら同じ指示を出すだけで同じ結果が再現できます。

Step 1
日本語で
やりたいことを伝える
Step 2
結果を見て
条件を追加する
Step 3
定型業務として
繰り返し使う
✔️For Eachの構文(配列・Selection・コレクション・FileSystemObjectの使い分け)を覚える必要がない
✔️対象の条件変更(シートの追加・除外条件など)にも、会話で伝え直すだけで対応できる
✔️担当者が変わっても、コードではなく「指示の履歴」を引き継げる
✔️ターミナル(黒い画面)を使わないデスクトップ版であれば、ChatGPTと同じ感覚で操作できる
AI鬼管理山崎 AI鬼管理山崎
もちろん「VBAやFor Eachを学ぶこと」自体には価値があります。ただ、目的が「選択範囲を一括で処理したい」「フォルダ内のファイルを整理したい」という作業そのものであれば、手段としてAIを使う方が圧倒的に早く、かつ属人化しないというのが弊社の結論です。

08 VBAで自分で書く vs AIに任せる 早見表 あなたの状況に合わせた選び方

最後に、状況別の判断基準を1枚の表にまとめます。

あなたの状況おすすめ理由
すでに安定稼働しているFor Each系マクロがあるVBAのまま維持動いているものを無理に置き換える必要はない
マクロを書ける担当者が1人しかいないAIへの移行を検討属人化リスクの解消が急務
単発・一度きりの一括処理をしたいAIに直接依頼コードを書く工数の方が高くつく
プログラミングを学ぶ目的も兼ねているVBAを学習構造化された学習には手を動かす経験が有効
複数業務(経理・営業・広告等)を横断で自動化したいAI(Claude Code)を軸に据えるVBAは基本Excel内に閉じるが、AIは業務横断で使える

迷ったときの目安は「その処理を1年後も同じ人がメンテナンスできるか」です。答えが「わからない」であれば、AIへの移行を検討する価値があります。

09 まとめ ── ループ処理の先にある「業務自動化」 For EachとAI、それぞれの正しい使い方

この記事では、VBAのFor Eachステートメントの基本構文から、配列・Selection・Worksheets/Workbooksコレクション・フォルダ内ファイルの一括取得まで、実務でよく使う4つのパターンを整理しました。最後にポイントを振り返ります。

✔️For Eachは「対象の件数を数えずに、集まりを1件ずつ自動処理する」構文
✔️番号(インデックス)を使った計算や、逆順ループが必要な場合はFor Nextを使う
✔️Selectionをループすれば、ユーザーが選んだ範囲を件数を問わず一括処理できる
✔️Worksheets・Workbooksコレクションで、複数シート・複数ブックを一律処理できる
✔️フォルダ内ファイルの一括取得にはFileSystemObjectとの組み合わせが有効。後期バインディングの方が環境差の事故が少ない
✔️既存の安定マクロは維持しつつ、対象の形が頻繁に変わる処理や新規業務はAIへの移行を検討する価値がある
✔️弊社GENAIではClaude Code導入により、経理などの一括処理系業務で月40時間→月5時間の削減効果(肌感値)

For Eachは今なお現場で強力な構文ですが、「対象の形が変わったときに誰が直すのか」という属人化の問題は避けて通れません。配列・Selection・ファイル処理のような小さなループであっても、積み重なれば大きな運用コストになります。

「うちのマクロ、実は担当者しかわからない」「新しく仕組みを作るなら、コードを書かない方法も検討したい」——そう感じた方は、ぜひ以下からAI鬼管理にご相談ください。

代表菅澤 代表菅澤
弊社では「AI鬼管理」というサービスで、VBAを含む既存の業務自動化資産の棚卸しから、Claude Codeを使った再設計・社内浸透まで伴走支援しています。属人化したマクロを一緒に見直すところから始められますので、お気軽にご相談ください。

「For Eachで書いた一括処理、実は誰も直せない」を、AI鬼管理が一緒に棚卸しします

VBAで積み上げてきた自動化資産を無理に捨てる必要はありません。
属人化リスクのある部分だけをAIに置き換える、現実的な移行プランをご提案します。

AI鬼管理山崎 AI鬼管理山崎
「社内のマクロが何本あるか把握できていない」という状態からでも大丈夫です。まずは無料相談で、貴社の自動化資産の現状整理からお手伝いします。

NEXT STEP

この記事の内容を、あなたのビジネスで
実践してみませんか?

AI鬼管理 — Claude Code導入支援トレーニング

AI活用を自社で回せるようになりたい方へ

AI鬼管理

Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。

AIBPO by AI鬼管理 — 定型業務の丸ごと代行

業務を丸ごと任せたい方へ

AIBPO by AI鬼管理

請求処理・データ入力・問い合わせ対応などの定型業務を、AI×人の品質管理体制で丸ごと代行。いまのコストの50%目安で、日々は成果物を承認するだけ。

よくある質問

Q. For EachとFor Nextはどちらを覚えればいいですか?

A. 両方覚えておくのが理想ですが、優先度で言えばFor Eachの方が実務での応用範囲が広いです。配列・シート・ファイルなど「集まりを丸ごと処理したい」場面が多い一方、番号を使った計算や逆順処理が必要になったときだけFor Nextを追加で覚える、という順番がおすすめです。

Q. For Eachでループ変数の値を書き換えると、元の配列も変わりますか?

A. 配列が文字列・数値などの値型の場合、ループ変数は値のコピーが渡されるため、ループ変数を書き換えても元の配列の中身は変わりません。一方、オブジェクト(Range・Worksheetなど)の場合はループ変数が参照そのものになるため、ループ変数のプロパティを変更すると元のオブジェクトにも反映されます。

Q. For Eachで逆順にループを回す方法はありますか?

A. For Each自体にはStepオプションに相当する逆順指定の機能がありません。逆順で処理したい場合は、For Next(Step -1)を使うか、対象をいったん配列に変換してからインデックスで逆順にアクセスする方法を使います。

Q. SelectionでFor Eachを使うとき、何も選択されていないとどうなりますか?

A. Excelでは通常、シート上で最低1つのセルが常に選択されている状態になるため「何も選択されていない」ことは基本的に起こりません。ただし、選択対象がセル範囲以外(グラフや図形など)の場合は、For Each cell In SelectionでRangeを期待するコードがエラーになります。実行前にTypeName(Selection)で種類を確認しておくと安全です。

Q. Worksheetsコレクションをループすると、グラフシートも処理対象になりますか?

A. いいえ、なりません。Worksheetsコレクションにはワークシートのみが含まれ、グラフシートは含まれません。ワークシートとグラフシートの両方をまとめて処理したい場合は、Sheetsコレクションを使う必要があります。

Q. FileSystemObjectを使うのに、参照設定は必ず必要ですか?

A. 必須ではありません。CreateObject("Scripting.FileSystemObject")を使う後期バインディングであれば、参照設定なしでFileSystemObjectを利用できます。参照設定(早期バインディング)は入力補完が使える利点がありますが、参照設定が無効な別のPCで開くとエラーになるため、複数人でマクロを共有する場合は後期バインディングの方が安全です。

Q. VBAを使わずに、AIだけで一括処理はできますか?

A. できます。Claude CodeのようなAIエージェントであれば、「選択範囲の数値セルを1.1倍にして」「このフォルダのファイルを一覧にして」と日本語で指示するだけで、For EachやFileSystemObjectに相当する処理をコードなしで実行できます。条件の追加や変更も会話ベースで対応できるため、非エンジニアの方でも扱いやすい方法です。

AIAI鬼管理

AI鬼管理/AIBPO by AI鬼管理へのお問い合わせ

この記事を読んで気になった方へ。
専門スタッフが、御社に最適な
業務自動化・業務代行プランを無料でご提案します。

サービスを選択してください

会社名を入力してください
業種を選択してください
お名前を入力してください
※法人・事業用のメールアドレスでお願いします(Gmail等の個人用フリーメールは受付できません)
正しいメールアドレスを入力してください

1つ以上選択してください
1つ以上選択してください
月額コストを選択してください

約1時間のオンライン面談(Google Meet)です

空き枠を取得中...
面談日時を選択してください

予約確定後、Google Calendarの招待メールをお届けします。
しつこい営業は一切ございません。

監修 最終更新日: 2026年8月13日
菅澤孝平
菅澤 孝平 株式会社GENAI 代表取締役
  • AI業務自動化サービス「AI鬼管理」を運営 — Claude Code を活用し、経営者の業務を「AIエージェントに任せる仕組み」へ転換するパーソナルトレーニングを 伴走構築 で提供。日報・採用・問い合わせ対応・経費精算・議事録・データ集計・営業リスト等の定型業務を、AIに代行させる体制を経営者と一緒に作り込む
  • Claude Code 実装ノウハウを 経営者・法人クライアント に直接指導。生成AIを「便利ツール」ではなく 「業務を任せる存在」 として運用する手法を体系化
  • 「やらせ切る管理」メソッドの開発者。シンゲキ株式会社(2021年設立・鬼管理専門塾運営)にて累計3,000名以上の学習者を志望校合格に導いた管理メソッドを、AI × 経営者支援 に転用
  • 著書『3カ月で志望大学に合格できる鬼管理』(幻冬舎)、『親の過干渉こそ、最強の大学受験対策である。』(講談社)
  • メディア出演: REAL VALUE / カンニング竹山のイチバン研究所 / ええじゃないかBiz 他
  • 明治大学政治経済学部卒
現在は AI鬼管理(Claude Code活用の伴走型パーソナルトレーニング)を主事業とし、経営者と二人三脚で「AIに業務を任せる仕組み」を実装。「実行を強制する環境」を AI で構築する手法を、自社の実運用知見をもとに発信している。