ADVERTISEMENT

【Power Automate】添付ファイル名が重複する時の保存方法

【Power Automate】添付ファイル名が重複する時の保存方法
🛡️ 超解決

Power Automateを使ってメールの添付ファイルやフォームのアップロードファイルを自動保存する際、同じ名前のファイルが存在すると上書きされたりエラーが発生したりすることがあります。この問題は、特に複数のユーザーが同じフォルダーにファイルを保存する場合や、定期的に同じ名前のファイルが送られてくる場合に頻発します。本記事では、ファイル名の重複を避けて確実に保存するための具体的な方法を、原因の切り分けから実装手順まで詳しく解説します。会社の業務フローでPower Automateを利用されている方に向けて、実務で即活用できる情報をお届けします。

【要点】この記事で確認すること

  • 最初に見る場所: フローのトリガー条件と保存先フォルダーの既存ファイル一覧を確認してください。どのようなタイミングで同じファイル名が生成されるのかを特定します。
  • 切り分けの軸: 重複の原因が「同じファイル名の連続受信」なのか「既存ファイルとの衝突」なのかを区別します。前者はユニークIDの付与、後者はタイムスタンプや連番の追加で対応します。
  • 注意点: 会社のSharePointやOneDriveの設定によっては、ファイル名の変更が許可されていない場合があります。管理者に確認せずに保存先のライブラリ設定を変更しないでください。

ADVERTISEMENT

ファイル名重複が発生する原因と基本的な考え方

Power Automateがファイルを保存するとき、多くの場合そのままのファイル名で保存先に書き込もうとします。重複が発生する原因は主に3つあります。1つ目は、同じメールやフォームから複数の添付ファイルが同じ名前で送られてくるケースです。2つ目は、異なるトリガーから同じ名前のファイルが短時間に連続して保存されるケースです。3つ目は、保存先フォルダーに既に同名のファイルが存在するケースです。

これらの原因に対して、Power Automateではフロー内でファイル名を動的に生成することで回避します。具体的には、元のファイル名にタイムスタンプやGUID(グローバル一意識別子)、連番などを付加する方法が一般的です。また、保存先のフォルダーを日付ごとに分けることで、重複自体が起きにくい構造にすることも有効です。以下のセクションでは、これらの方法を実装例と共に説明します。

ファイル名重複が発生する具体的なシナリオ

実際の業務で遭遇しやすいシナリオを3つ紹介します。いずれもPower Automateでよく使われるトリガーに関連しています。

シナリオ1: メール添付ファイルの定期保存

毎日「売上報告.xlsx」というファイルが添付されたメールが届く場合、フローがそのままのファイル名で保存すると、2日目以降は「売上報告.xlsx」が上書きされます。過去のデータが失われる危険があります。

シナリオ2: SharePointリストへのファイルアップロード

複数のユーザーが同じリストに「提案書.docx」というファイルをアップロードした場合、Power Automateがそのファイルを取得して別の場所に保存しようとすると、既に同じ名前のファイルが存在すればエラーになります。

シナリオ3: フォーム回答の添付ファイル

Microsoft Formsで「報告書.pdf」というファイルをアップロードする設問がある場合、異なる回答者が同じファイル名を使うと、保存時に重複が発生します。特にFormsのトリガーはファイル名に元の名前を使用するため、そのままでは衝突します。

重複を回避するための保存方法と実装手順

ここでは、ファイル名にユニークな情報を付与する代表的な方法を、Power Automateの操作手順として5つ以上示します。いずれも「ファイル名」を動的に生成する部分がポイントです。

  1. タイムスタンプを付与する: フロー内で「現在の日時」を取得し、元のファイル名に連結します。例えば「売上報告_20250315_143022.xlsx」のように秒単位まで含めれば、ほぼ一意になります。手順: アクション「現在の時刻を取得」 → 書式設定文字列「yyyyMMdd_HHmmss」 → 式 concat(triggerBody()?['name'], '_', formatDateTime(utcNow(), 'yyyyMMdd_HHmmss'), '.xlsx') で新しいファイル名を作成。
  2. GUID(グローバル一意識別子)を追加する: guid()関数を使ってランダムな文字列を生成し、ファイル名に含めます。例: 「file_.xlsx」。手順は式 concat(triggerBody()?['name'], '_', guid(), '.xlsx') をファイル名設定に入力します。
  3. 連番を付与する(既存ファイルとの衝突回避): 保存先のフォルダーで既存ファイルをリストし、同じ名前があった場合は末尾に数字を追加します。Power Automateでは「ファイルのリスト」アクションを使って配列を取得し、条件分岐で最大の連番を調べて+1します。複雑ですが、重複を確実に避けたい場合に有効です。
  4. 日付フォルダーに保存する: 保存先のパスに日付のサブフォルダーを作成します。例えば「/売上レポート/2025/03/15/売上報告.xlsx」とすると、同じファイル名でも日付が違えば別フォルダーになるため重複しません。手順: 「フォルダーの作成」アクションで concat('/売上レポート/', formatDateTime(utcNow(), 'yyyy/MM/dd')) のパスを作成し、その中に保存します。
  5. 元のファイル名に送信元情報を加える: メールの場合は送信者のメールアドレスや件名の一部をファイル名に含めます。例: 「売上報告_xxx@company.com.xlsx」。式 concat(body()?['subject'], '_', body()?['from'], '.xlsx') のように記述します。
  6. コンテキストごとにフォルダーを分ける: ファイルの種類やプロジェクト名をトリガーから取得して、保存先フォルダーを動的に変更します。例えばメールの件名に「プロジェクトA」とあればそのフォルダーに入れます。

これらの方法は単独でも組み合わせても使えます。最もシンプルで確実なのは「タイムスタンプ+連番」ですが、GUIDもランダム性が高くおすすめです。ただし、GUIDは人間がファイルを探すときに識別しにくいという欠点があります。業務の用途に応じて選択してください。

各方法の比較表

方法 メリット デメリット おすすめシーン
タイムスタンプ付与 実行日時がわかりやすい。ほぼ一意。 同一秒に複数実行があると重複する可能性がある。 1日に数回程度の保存で十分。
GUID追加 絶対に重複しない。実装が簡単。 ファイル名が長くなり、見た目で識別しにくい。 重複が絶対に許されない場合。
連番付与 連続性が保たれ、管理しやすい。 既存ファイル一覧を取得するため動作が重くなる。 バッチ処理で大量に保存する場合。
日付フォルダー分割 ファイル名を変えずに済む。フォルダーで整理される。 フォルダー作成アクションが必要。階層が深くなる。 定期的に同じファイル名が届く場合。

失敗パターンと注意点

よくある失敗パターンを挙げて、それぞれの対策を説明します。

失敗パターン1: 動的コンテンツの誤った参照

ファイル名を生成する際に、トリガー出力のプロパティ名を間違えると、空の文字列や予期しない値がファイル名になります。例えば、メールの添付ファイル名は triggerBody()?['attachments'][0]?['name'] ですが、これを triggerBody()?['name'] と間違えると件名が入ってしまいます。必ずデザイナーで動的コンテンツを確認し、テスト実行で期待通りのファイル名が出力されるか検証してください。

失敗パターン2: タイムスタンプのタイムゾーン問題

Power AutomateのutcNow()はUTC時刻を返します。日本時間で表示したい場合は、convertTimeZone関数を使って変換する必要があります。タイムスタンプをファイル名に使う場合、同じフローでも実行時刻によってUTCと日本時間で日付が変わることがあるため注意が必要です。例: convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time', 'yyyyMMdd_HHmmss')

失敗パターン3: 保存先の権限不足

フローがファイルを保存するために必要な権限がない場合、エラーが発生します。特にSharePointやOneDriveでは、フローが使用する接続アカウントに書き込み権限があるか確認してください。また、管理者が「ファイル名の変更を許可しない」設定にしているライブラリでは、上書き保存もできないことがあります。

管理者に確認すべき事項

Power Automateのフローでファイル保存に関する問題が解決しない場合、以下の項目を管理者に確認してください。

  • 保存先のストレージ設定: SharePointやOneDriveのライブラリ設定で「ファイルのバージョン管理」や「ファイル名の重複を許可しない」などの制限がかかっていないか。
  • コネクタのアクセス許可: Power Automateと保存先サービス間の接続に使用しているアカウントの権限が適切か。特にSharePointでは「編集」以上の権限が必要です。
  • テナント全体のポリシー: Office 365のテナントポリシーで、外部からのファイル保存に関する制限(例えば、ファイル名に使える文字の制限など)がないか。
  • フローの実行ログ: Power Automateの実行履歴でエラーの詳細を確認し、問題の根本原因を特定できる場合があります。管理者はログを確認する権限を持っていることが多いので、必要に応じて依頼してください。

よくある質問(FAQ)

Q1: 同じファイル名でも上書きせずに保存する方法はありますか?

はい、この記事で紹介したタイムスタンプやGUIDをファイル名に追加する方法で対応できます。上書きを避けるためには、必ず一意の識別子を追加するようにしてください。

Q2: ファイル名に使えない文字はありますか?

ファイル名に使用できない文字があります。WindowsやSharePointでは「\ / : * ? ” < > |」は使えません。Power Automateの関数でファイル名を動的に生成する際は、これらの文字が含まれていないか確認し、replace()関数などで除去してください。

Q3: 既に存在するファイル名と同じ場合、自動的にリネームするフローは作れますか?

可能です。連番付与の手順で説明したように、保存先のファイル一覧を取得し、同名のファイルが存在する場合は末尾に「_1」「_2」などの番号を追加するフローを組むことで自動リネームできます。

まとめ

Power Automateで添付ファイル名が重複する問題は、ファイル名にタイムスタンプやGUIDなどのユニークな情報を追加することで解決できます。どの方法を選ぶかは、業務の特性や要件に応じて判断してください。また、保存先の権限やテナントポリシーによっては制限があるため、管理者への確認を忘れずに行ってください。本記事で紹介した手順を参考に、安定したファイル保存フローを構築してください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。

ADVERTISEMENT