UiPath フロー制御(条件分岐・繰り返し)

【UiPath】繰り返し処理を効率化!For Eachアクティビティ活用術

日々の業務でExcelやファイル操作、メール処理などを行っていると「同じ処理を何度も繰り返す」場面に遭遇することが多いのではないでしょうか。請求書ファイルを複数処理する、顧客リストを順番に読み込む、メールを一通ずつチェックして添付を保存するなど、反復作業はRPAの得意分野です。

UiPathにおける「For Eachアクティビティ」は、こうした繰り返し処理を効率的に実現するための重要な機能です。配列やリスト、DataTable、メールのコレクションなど、さまざまなデータを一件ずつ処理する仕組みを簡単に作成できます。

この記事では、UiPathでのFor Eachアクティビティの基本から、実務での活用方法、注意点、そしてベストプラクティスまでを徹底解説します。繰り返し処理をマスターすれば、業務自動化の幅が飛躍的に広がります。

✅ For Eachアクティビティとは?

・基本の役割

For Eachアクティビティは、コレクションや配列の要素を一つずつ取り出して処理を行うためのループ構文です。プログラミングでいう「For Each文」と同じ考え方で、UiPathではドラッグ&ドロップで簡単に設定できます。

・使用できる対象

  • 配列(Array)
  • リスト(List)
  • DataTableの行(DataRow)
  • メールメッセージ(MailMessage)
  • ファイルコレクション(Directory.GetFilesの戻り値)

これらをFor Eachに渡すことで、要素ごとの処理が可能になります。

参考:【VBA】For文:空白行まで繰り返す処理方法


✅ For Eachアクティビティの基本構造

・TypeArgumentの設定

For Eachで扱うデータ型を指定する項目です。例えば「String配列」を処理する場合はStringを選択、「MailMessageコレクション」を処理する場合はSystem.Net.Mail.MailMessageを選択します。

・Body内での処理

ループごとに実行する処理を配置します。ファイル名をログに出力する、DataTableの各行を読み込む、メールの添付を保存するなどが可能です。


✅ 実際に使えるFor Eachの活用例(基本編)

・文字列配列を処理する

例:商品コードの配列を順番に取り出してログに出力する。

  1. 配列変数 arrProducts に {"A001", "A002", "A003"} を格納
  2. For EachのTypeArgumentを String に設定
  3. Bodyで「Write Line」を使用し、itemを出力

→ 順番に「A001」「A002」「A003」が出力されます。

・ファイル一覧を処理する

例:フォルダ内のExcelファイルを順番に処理する。

  1. Directory.GetFiles("C:\Data\", "*.xlsx") をコレクションに指定
  2. For EachのTypeArgumentを String に設定
  3. Bodyで「Excel Application Scope」を配置し、対象ファイルを開いて処理

✅ DataTableとFor Eachの組み合わせ

・For Each Row

DataTableの各行を処理する場合、専用の「For Each Row」アクティビティを利用できます。

例:顧客リスト(DataTable)から顧客ごとに請求メールを送信する。

  1. Excelから顧客データを読み込みDataTableに格納
  2. For Each Rowで1行ずつ取り出す
  3. 変数 row("顧客名")row("メールアドレス") を使って処理

これにより、数百件の顧客情報でも自動で処理可能になります。

参考:【UiPath】複数ファイルを一括処理する方法|Excel・CSV対応




✅ Outlookメール処理での活用例

・受信メールの仕分け

  1. 「Get Outlook Mail Messages」で受信トレイからメールを取得
  2. For EachのTypeArgumentを System.Net.Mail.MailMessage に設定
  3. Bodyで「If文」を使い、件名に「請求書」が含まれていれば添付を保存

・エラーメール検知

システムから送信されたメールをFor Eachでチェックし、特定ワードが含まれる場合に別フォルダへ移動する仕組みも簡単に構築できます。

参考:【UiPath】Outlookメールを仕分け&保存する方法|業務効率化に直結するRPA活用術


✅ 繰り返し処理の効率化テクニック

・処理対象をフィルタリング

不要な要素まで処理しないように、事前にLINQクエリでコレクションを絞り込むと効率的です。

例:Directory.GetFiles("C:\Data").Where(Function(f) f.EndsWith(".xlsx"))

・ループ内の処理を軽量化

For Eachの中で重い処理を実行すると全体が遅くなります。データをまとめて処理できる場合は、ループの外で一括処理を検討しましょう。

・Try Catchで例外処理

1件だけ失敗しても処理全体が止まらないように、ループ内にTry Catchを設置すると安定性が向上します。


✅ 実務シナリオでのFor Each活用例

・請求書ファイルの一括処理

フォルダに保存された数十件の請求書を順番に開き、Excelから必要情報を読み取ってまとめる。

参考:【Excel】月単位の日付計算をする方法【月末処理・締日・請求書にも使える!】

・複数システムからのデータ収集

Webからダウンロードした複数CSVをFor Eachで処理し、一つのExcelに統合。

参考:【ChatGPT】ExcelデータをChatGPTに送って要約するPower Automateフロー

・人事データの自動更新

社員マスタをDataTableとして読み込み、For Each Rowで一人ずつ処理し、勤怠や評価データを更新。

・定型メール送信

顧客リストをFor Eachで読み込み、宛先ごとにカスタマイズしたメールを自動送信。


✅ For Each活用時の注意点

・TypeArgumentの設定ミス

正しい型を設定しないとエラーになります。特にMailMessageやDataRowの型は間違いやすいので注意。

・無限ループに注意

コレクションが変化する処理を組み込むと意図せず無限ループになる可能性があります。処理の流れを事前に整理しましょう。

・大量データ処理

1万件以上のデータをループで処理する場合、実行時間が長くなることがあります。必要に応じてバッチ処理化を検討しましょう。


✅ ベストプラクティス:効率的なループ設計

・変数を使い分けて可読性を向上

itemをそのまま使うのではなく、filePathmailといったわかりやすい変数名に置き換えると可読性が向上します。

・ログ出力を適度に入れる

ループの進捗をログに出力することで、処理の状況が把握しやすくなり、デバッグや運用がスムーズになります。

・小さな単位でテスト

いきなり全件処理するのではなく、最初は3件程度で動作確認すると効率的です。


✅ 応用編:For Each×他アクティビティの組み合わせ

・Excel×For Each

複数のシートをFor Eachで処理し、データを統合する仕組みを構築可能。

・Web×For Each

複数のURLを配列に格納し、For Eachで順番にアクセスしてスクレイピングを実行。

・AI×For Each

ChatGPTなどのAPIを呼び出し、複数テキストデータを順次解析して要約する仕組みに応用できます。


■ まとめ:UiPathのFor Eachで繰り返し処理を効率化しよう

  • For Eachは配列・リスト・DataTable・メールなどを順番に処理できる便利なアクティビティ
  • 実務ではファイル一括処理、顧客リスト処理、メール仕分けなどに活用可能
  • 効率化のポイントは「対象の絞り込み」「軽量化」「エラーハンドリング」
  • 注意点はTypeArgument設定、無限ループ、処理件数の多さ
  • 応用編ではExcelやWeb、AIとの連携でさらなる自動化が可能

繰り返し処理はUiPathの基礎でありながら応用範囲が非常に広い要素です。For Eachアクティビティを自在に使いこなせば、単純作業の自動化だけでなく、複雑な業務フローを統括する強力な武器になります。

    -UiPath, フロー制御(条件分岐・繰り返し)