Power Automate(旧称Microsoft Flow)でCSVファイルを読み込み、各行に対して処理を実行するフローは、日常業務の自動化に非常に役立ちます。しかし、実際に作成してみると、想定通りに動かない、データが欠損する、ループが止まらないなどのトラブルが発生することがあります。これらの問題の多くは、CSVの構造やPower Automateの動作特性に対する理解不足が原因です。この記事では、Power AutomateでCSVを読み込んで行ごとに処理する際に押さえておくべき注意点を、具体的なトラブル事例とともに解説します。
【要点】この記事で確認すること
- 最初に見る場所: CSVの文字コード(UTF-8 BOM付きかどうか)と列名のスペル、データ型(数値か文字列か)
- 切り分けの軸: 端末側(CSVファイル自体の設定)、アカウント側(Power Automateライセンスや実行制限)、管理設定側(コネクタの設定やデータ損失防止ポリシー)
- 注意点: 会社PCで勝手に変更しないほうがよい設定(例:排他制御や再帰的なループ)は、管理者に確認してから行うこと
ADVERTISEMENT
目次
CSV読み込みで起こりがちなトラブル
Power AutomateでCSVを読み込む際に、多くのユーザーが直面するトラブルには、主に文字コードの問題、列名の不一致、データ型の違いがあります。これらの問題を事前に理解しておくことで、デバッグ時間を大幅に短縮できます。
文字コードの問題
Power Automateの「CSVの解析」アクションは、デフォルトでUTF-8エンコードを期待しています。しかし、WindowsのExcelで作成したCSVは、多くの場合「Shift-JIS」や「UTF-8 BOMなし」で保存されます。このため、日本語や特殊文字が正しく認識されず、文字化けや行の欠落が発生します。対策として、CSVファイルを事前に「UTF-8 BOM付き」で保存するか、Power Automate側で「ファイルコンテンツ」を読み込む際にエンコードを指定する必要があります。
列名の不一致
「CSVの解析」アクションは、CSVの1行目を列名として解釈します。そのため、列名にスペースや特殊記号が含まれていると、後続のアクションで参照する際にエラーになります。また、列名が期待しているものと一字でも異なると、動的なコンテンツが空になります。例えば、Excelで見た時に「ID」と表示されていても、実際のCSVデータでは「 Id」のようにスペースが入っているケースがあります。
データ型の違い
CSVは全てが文字列として読み込まれます。数値として計算したい場合や日付として扱いたい場合は、明示的な変換が必要です。例えば、数値の列をそのまま条件式で比較すると文字列比較になるため、想定外の結果になることがあります。また、日付の書式が異なる場合も、正しく認識されない原因になります。
Power AutomateでのCSV読み込みの基本手順
ここでは、よく使われる「ファイルコンテンツを取得」→「CSVの解析」→「行ごとに処理」の流れを、具体的な手順として示します。以下の手順を参考に、自分のフローと比較してみてください。
- トリガーを設定する。 例えば「新しいメールが届いたとき」や「ファイルが作成されたとき」など、CSVファイルを起点とするトリガーを選択します。
- CSVファイルのコンテンツを取得する。 メールの添付ファイルであれば「添付ファイルのコンテンツ」アクション、SharePointのファイルであれば「ファイルコンテンツの取得」アクションを使います。
- 「CSVの解析」アクションを追加する。 アクションの検索で「CSVの解析」を選び、入力に前のステップで取得したファイルコンテンツを指定します。列名ヘッダーがある場合は「最初の行がヘッダー」をはいに設定します。
- 「Apply to each」コントロールを追加する。 前のアクションの出力「CSVテーブル」を選択します。ここで、CSVの各行がループごとに1行ずつ処理されます。
- ループ内で処理を記述する。 例えば、各行の列の値を取得するには、動的コンテンツピッカーから「列名」を選びます。必要に応じて、条件分岐やデータ変換のアクションを追加します。
- フローを保存しテストする。 実際のCSVファイルを使って実行し、結果が期待通りか確認します。エラーが発生した場合は、後述のトラブルシューティングを参考に修正します。
行ごとの処理で注意すべきポイント
Apply to eachのループ内での注意
「Apply to each」は、デフォルトでCSVの全行をループ処理しますが、いくつかの落とし穴があります。まず、ループ内で外部サービス(SharePoint、SQL Serverなど)への書き込みを行う場合、行数が多いとAPIの呼び出し制限に引っかかる可能性があります。そのため、「一度に処理する行数」を制限するか、バッチ処理を検討する必要があります。また、ループ内で動的コンテンツの値が「空」になる場合は、列名の不一致が原因であることがほとんどです。デバッグのために、ループの最初に「HTMLテーブルの作成」アクションを入れて、各行の内容を一時的に確認する方法も有効です。
一度に処理できる行数の上限
Power Automateには、無料ユーザーでは1回のフロー実行で最大5000行(または30日間の実行数制限)など、様々な制限があります。また、ライセンスによってはAPIの呼び出し回数や同時実行数に制限があります。大量のCSV(例えば数万行)を処理する場合は、フローを分割するか、永続的なコネクタ(SQL Serverなど)を使って段階的に処理する必要があります。必ず事前にOffice 365の管理者にライセンスの上限を確認してください。
状況別比較表
| 項目 | 正しい設定 | よくある間違い | 解決方法 |
|---|---|---|---|
| 文字コード | UTF-8 BOM付き | Shift-JISやUTF-8 BOMなし | CSVファイルをメモ帳で開き、「名前を付けて保存」でUTF-8 BOM付きを選択。またはPower Automateの「ファイルコンテンツの変換」アクションでエンコード指定 |
| 列名のスペル | 半角英数字、先頭にスペースなし | 全角文字、スペース、記号を含む | CSVの先頭行を確認し、列名を簡潔な半角英数字に変更する |
| データ型 | 数値は文字列のまま扱うか、明示的に「int()」などで変換 | 数値比較を文字列で行う | 条件式で「数値の値」を選択するか、式ビルダーで int(outputs(…)) を使う |
| 日付形式 | ISO 8601形式(yyyy-mm-dd) | 日本語の年月日やスラッシュ区切り | Power Automateの「日付形式の変換」アクションを使用、またはExcel側で書式を統一 |
| 行数制限 | 一度に5000行以下(ライセンスによる) | 大量行を一度に処理しようとする | フローを分割(フィルター行で範囲指定)するか、DataverseやSQL Serverにステージングする |
よくある失敗パターンと回避方法
実際に多くのユーザーから報告されている失敗パターンを紹介します。あなたのフローが該当しないか確認してみてください。
- 「CSVの解析」アクションでエラーが発生する: 原因として、ファイルコンテンツが空または壊れている、または文字コードが不一致であることが多いです。最初にファイルコンテンツを取得した直後に「ファイルの内容」を確認するアクション(例:メール送信)を挟むと、問題の切り分けが容易になります。
- Apply to each内で列の値が常に空になる: 列名のスペルミス、またはCSVの最初の行に実際のデータが入っている可能性があります。CSVファイルをテキストエディタで開き、1行目が列名であることを確認します。また、動的コンテンツピッカーで表示される列名と全く同じ文字列を選んでいるか確認します。
- ループが無限に続く(タイムアウトする): フロー内で自分自身を呼び出す再帰的な処理や、意図しないループが発生していないか確認します。また、CSVファイル内に空行が含まれていると、空行も処理対象になるため、事前に「行をフィルターする」アクションで空行を除外する必要があります。
- 数値の計算結果がおかしい: 例えば「100」という値が文字列の「100」として扱われ、加算すると「10050」のように文字列連結されてしまいます。数値計算が必要な場合は、必ず「整数値」や「浮動小数点数値」のアクションを使って型変換を行います。
管理者に確認すべき設定項目
Power Automateの動作に影響を与える管理者側の設定も、トラブルの原因になり得ます。以下の項目は、必要に応じてOffice 365の管理者に確認してください。
- データ損失防止(DLP)ポリシー: CSVファイルの読み取り元(SharePoint、OneDriveなど)がDLPポリシーによってブロックされていないか確認します。許可されていないと、コネクタが正しく動作しません。
- コネクタの使用制限: 特定のコネクタ(例えばSharePoint)のAPI呼び出し回数に制限が設定されている場合、大量行の処理中に制限に達し、フローが途中で停止することがあります。管理者に現在の制限値と緩和の可否を確認します。
- ライセンスの種類: Power Automateの無料版(Office 365付属)と有料版(Premium)では、実行頻度や行数制限が異なります。大量のCSVを定期的に処理する場合は、適切なライセンスが割り当てられているか確認します。
よくある質問(FAQ)
Q1. CSVの読み込みに「CSVの解析」アクションを使うとき、列名に日本語を使っても大丈夫ですか?
A1. 技術的には可能ですが、動的コンテンツでの参照時にエラーが発生しやすくなります。半角英数字に置き換えることを推奨します。どうしても日本語が必要な場合は、列名を事前に英語にマッピングする処理を追加してください。
Q2. 大量のCSV(1万行以上)をメールで受信して処理したいです。一度にすべて処理できますか?
A2. 無料ライセンスでは5000行まで、プレミアムライセンスでもAPIの制限があります。そのため、一度にすべて処理するのは避け、例えば「一度に1000行ずつ処理する」ようにフローを分割するか、Power Automateの「並列処理」設定を調整する必要があります。管理者に相談の上、適切な方法を選んでください。
Q3. 「CSVの解析」アクションでエラーになりました。ファイルを開いても問題なさそうです。何が原因でしょうか?
A3. 最も多い原因は文字コードの不一致です。ファイルをメモ帳で開き、「名前を付けて保存」で「UTF-8 BOM付き」を選択して保存し直すと解決することが多いです。また、ファイルの中に改行を含むセルがある場合、CSV形式が壊れることもあります。その場合は、事前にそのようなデータを除去するか、パース方法を変更します。
Q4. Apply to eachの中でSharePointリストにアイテムを追加する処理をしていますが、途中でタイムアウトします。どうすればよいですか?
A4. APIの呼び出し制限に達した可能性があります。ループ内で「一時停止」アクション(例えば30秒待機)を入れると制限を回避できることがあります。また、「バッチ処理」パターン(配列を分割して並列実行)を検討してください。管理者にAPI制限の緩和を依頼することも選択肢です。
まとめ
Power AutomateでCSVを読み込んで行ごとに処理する際は、文字コード、列名、データ型の3つを最初に確認することが重要です。特に文字コードは「UTF-8 BOM付き」に統一することで、多くの文字化け問題を解決できます。また、Apply to eachのループ内ではAPI制限や空行の処理に注意し、必要に応じて管理者にライセンスやポリシーの設定を確認しましょう。トラブルが発生した場合は、必ずCSVファイルの内容をテキストエディタで直接確認し、Power Automateが期待する形式と一致しているか検証してください。この記事で紹介したポイントを押さえることで、安定したフローの運用が可能になります。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Office・仕事術の人気記事ランキング
- 【Outlook】添付ファイルが「Winmail.dat」に化ける!受信側が困らない送信設定
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【神技】保存せずに閉じたExcel・Wordファイルを復元する!消えたデータを復活させる4つの救出法
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Copilot】「サービスに接続できません」エラーの原因切り分けと対処法
- 【Word】校閲機能の基本!赤字(変更履歴)とコメントで修正を見える化する
- 【PDF】PDFに入力した文字の「フォント・サイズ・色」を変更するプロパティ設定
- 【PDF】PDFのサムネイルプレビューが表示されない!エクスプローラーの設定とAcrobat環境設定
- 【Teams】会議の「参加者リスト」を出席後にダウンロードする!誰が参加したか確認する手順
- 【PDF】結合するPDFの「用紙サイズ」がバラバラな時、すべてを「A4サイズ」に強制リサイズしてから結合する
