業務効率化
PR

Power Automateで ExcelをCSVに自動変換する方法|「CSVテーブルの作成」開設

sanane
記事内に商品プロモーションを含む場合があります

はじめに

「Excel で管理しているデータを、別システムへの取り込み用に CSV ファイルとして書き出したい」——こうしたニーズはとても多いです。手作業で「名前を付けて保存 → CSV」を毎回やるのは面倒ですし、ファイルが増えるとミスも起きやすくなります。

本記事では、プレミアムライセンスなし・標準コネクタだけで、Excel のテーブルを CSV ファイルに自動変換する Power Automate フローを、実際の画面つきで最初から最後まで解説します。さらに、つまずきやすい「余分な列が混ざる問題」「Excel で開くと日本語が文字化けする問題」の対策まで踏み込みます。

こんな人にオススメ
  • Excel のデータを定期的に CSV へ書き出して別システムに取り込みたい
  • プレミアムライセンスがなく、標準コネクタだけで作りたい
  • 出力した CSV に @odata.etag など余計な列が混ざって困っている
  • 出力した CSV を Excel で開くと日本語が文字化けする

完成イメージ:このフローがやること

今回作るのは「OneDrive 上の Excel テーブルを読み取り、CSV ファイルとして同じ OneDrive に保存する」というシンプルなフローです。ボタンひとつ(手動トリガー)で実行でき、慣れればスケジュール実行やメール添付など、好きなトリガー・出力先に置き換えられます。

Power Automate で Excel を CSV に変換するフローの全体図。手動トリガー・表内に存在する行を一覧表示・CSVテーブルの作成・ファイルの作成の4アクション

フロー全体の構成

フローは次の 4 つのアクションで構成します。使うコネクタはすべて標準(プレミアム不要)です。

  1. フローを手動でトリガーする(トリガー)… ボタンで実行
  2. 表内に存在する行を一覧表示(Excel Online (Business))… Excel テーブルを読み取る
  3. CSVテーブルの作成(データ操作)… 取得した行を CSV 形式の文字列に変換
  4. ファイルの作成(OneDrive for Business)… CSV を output.csv として保存

事前準備:変換元の Excel テーブル

変換元として、OneDrive for Business に sample-data.xlsx を置いておきます。ポイントは、データ範囲を「テーブル」として書式設定しておくことです(Excel で範囲を選択し「テーブルとして書式設定」)。Power Automate の「表内に存在する行を一覧表示」は、このテーブル単位でデータを読み取ります。

今回は次のようなテーブル(テーブル名:売上テーブル)を用意しました。

日付商品名数量単価合計
2026/06/01りんご101501500
2026/06/02バナナ25802000
2026/06/03みかん151001500
2026/06/04ぶどう53001500
2026/06/05いちご85004000

「表内に存在する行を一覧表示」はテーブル名を指定して読み取るアクションです。データが普通のセル範囲のままだとテーブルとして認識されないので、必ず Excel 側で「テーブルとして書式設定」しておきましょう。

フローの作成手順

① インスタント クラウド フローを作成する

Power Automate(make.powerautomate.com)にアクセスし、左メニューの「作成」から「インスタント クラウド フロー」を選びます。トリガーには「フローを手動でトリガーする」を指定して作成すると、トリガーだけが置かれた空のキャンバスが開きます。

トリガーを追加する前の空のフローキャンバス

② Excel「表内に存在する行を一覧表示」を追加する

トリガーの下の「+」から新しいアクションを追加し、Excel Online (Business)「表内に存在する行を一覧表示」を選びます。続いて、変換元のファイルとテーブルを指定します。

  • 場所:OneDrive for Business
  • ドキュメント ライブラリ:OneDrive(ドキュメント)
  • ファイル:/sample-data.xlsx
  • テーブル:売上テーブル
表内に存在する行を一覧表示アクションで、ファイルとテーブル(売上テーブル)を指定した画面

③ データ操作「CSVテーブルの作成」を追加する

次にデータ操作コネクタの「CSVテーブルの作成」を追加します。これが今回の主役で、取得した行データを CSV 形式の文字列に変換してくれます。

From(開始)に、ひとつ前のアクションの出力 value を指定します。動的コンテンツの一覧から「表内に存在する行を一覧表示」の value を選べば OK です。

CSVテーブルの作成アクションの From に value を指定した画面

この時点では「列(Columns)」は既定の「自動」のままで構いません。まずは最短ルートで CSV を出力し、列のカスタマイズは後半の【応用①】で行います。

④ OneDrive「ファイルの作成」を追加する

最後に OneDrive for Business「ファイルの作成」を追加し、CSV を保存します。

  • フォルダーのパス:/(ルート。任意のフォルダーで可)
  • ファイル名:output.csv
  • ファイル コンテンツ:「CSVテーブルの作成」の出力(Output)
ファイルの作成アクションで、ファイル名 output.csv とファイルコンテンツに CSVテーブルの作成の Output を指定した画面

⑤ 保存する

右上の「保存」をクリックします。「フローを開始する準備ができました」と表示されれば、4 つのアクションがエラーなくつながっています。

フローを保存し、開始する準備ができたと表示された状態

テストで動作を確認する

右上の「テスト」→「手動」を選び、「テスト」「フローの実行」と進めます。

フローのテスト実行方法を選ぶ画面

実行が完了すると、各アクションに緑のチェックが付き、「テストに成功しました」と表示されます。

フローの実行が成功し、各アクションに緑のチェックが付いた画面

OneDrive を開くと、ルートに output.csv が作成されています。これで Excel → CSV の自動変換は完成です。

OneDrive のマイファイルに output.csv が作成された状態

…と、ここで終わってもよいのですが、実際に output.csv の中身を見ると、2 つの「あるある」な問題に気づきます。次の応用編で解決していきましょう。

【応用①】余分な列「@odata.etag」「ItemInternalId」を消す

既定の設定(Columns=自動)で出力した CSV を開くと、データの先頭に見覚えのない列が 2 つ付いています。

@odata.etag,ItemInternalId,日付,商品名,数量,単価,合計
,18eb0dae-eca9-4a53-9598-8b43d859c041,2026/06/01,りんご,10,150,1500
,073d9ecb-5183-40b6-8b6d-7d19a7d47cc2,2026/06/02,バナナ,25,80,2000

この @odata.etagItemInternalId は、Power Automate(Excel コネクタ)が内部的に付与するメタデータで、元の Excel テーブルには存在しない列です。それぞれの意味は次のとおりです。

余分な列の正体
  • @odata.etag… OData の楽観的ロック用エンティティタグ(行のバージョン識別子)。API が自動で付けるメタデータ
  • ItemInternalId… Power Automate が Excel の各行を識別するために内部的に割り振る ID

システム連携には不要どころか邪魔になることが多い列です。これらを出力しないようにするには、「CSVテーブルの作成」のColumns(列)を「カスタム」に切り替えて、出力したい列だけを明示的に指定します。

Columns を「カスタム」にして列を指定する

「CSVテーブルの作成」の詳細パラメーターから Columns を表示し、「カスタム」を選択します。すると Header(見出し)Value(値)のペアを行ごとに入力できるようになります。出力したい 5 列を次のように設定します。

  • Header:日付 Value:item()?['日付']
  • Header:商品名 Value:item()?['商品名']
  • Header:数量 Value:item()?['数量']
  • Header:単価 Value:item()?['単価']
  • Header:合計 Value:item()?['合計']

Value には、各行の列を参照する式 item()?['列名'] を入れます。Value 欄に / を入力して「動的なコンテンツを挿入する」から列名を選ぶと、自動で同じ式が入ります。

CSVテーブルの作成の Columns をカスタムにし、日付・商品名・数量・単価・合計の5列を Header/Value で指定した画面

これで @odata.etagItemInternalId は出力されず、必要な 5 列だけのきれいな CSV になります。

Header に入力した文字列が、そのまま CSV の見出し行になります。連携先システムが英語の見出しを要求する場合は、Header を date / product のように英語にしておくと、変換後の加工が不要になります。

【応用②】Excel で開くと日本語が文字化けする問題を解決する

もうひとつの「あるある」が文字化けです。出力した output.csv をダブルクリックで Excel で開くと、日本語が 譌・莉� のように化けてしまいます。

原因は文字コードの解釈の食い違いです。「CSVテーブルの作成」が出力する CSV は UTF-8 ですが、Windows 版 Excel は CSV をダブルクリックで開くとき、文字コードを Shift_JIS(ANSI)だと推測してしまいます。そのため UTF-8 の日本語が誤って解釈され、文字化けが起きます。

解決策は、ファイルの先頭に BOM(Byte Order Mark)という「これは UTF-8 ですよ」という目印を付けることです。BOM 付き UTF-8 にすると、Excel が自動的に UTF-8 と認識し、文字化けせずに開けます。

ファイル コンテンツに BOM を付ける式を設定する

「ファイルの作成」のファイル コンテンツを、CSV の出力そのままではなく、先頭に BOM を連結した式に変更します。フィールドに / を入力 →「式を挿入する」を選び、式エディターに次を入力して「追加」します。

concat(uriComponentToString('%EF%BB%BF'), body('CSV_テーブルの作成'))
ファイルの作成のファイルコンテンツに、BOM を連結する concat 式を設定した画面
式の意味
  • uriComponentToString('%EF%BB%BF')… UTF-8 の BOM(バイト列 EF BB BF)を文字として生成する
  • body('CSV_テーブルの作成')… 「CSVテーブルの作成」が出力した CSV 文字列
  • concat(...)… BOM と CSV を連結し、「BOM 付き UTF-8 の CSV」にする

body('CSV_テーブルの作成') のアクション名(CSV_テーブルの作成 の部分)は、自分のフローでのアクション名に合わせてください。アクション名を変更している場合は、その名前に置き換えます。スペースは _(アンダースコア)になります。

保存して再テストする

保存してもう一度テスト実行します。実行が成功し、output.csv が上書きされます。

BOM 対応後にフローを再実行し、正常に開始された画面

OneDrive に保存された output.csv をダウンロードして Excel で開くと、今度は日本語が文字化けせず、余分な列もないきれいな CSV になっています。

BOM 付き UTF-8・カスタム列で出力し直した output.csv が OneDrive に保存された状態

最終的な CSV の中身は次のようになります。余分な列がなく、Excel でもそのまま正しく開けます。

日付,商品名,数量,単価,合計
2026/06/01,りんご,10,150,1500
2026/06/02,バナナ,25,80,2000
2026/06/03,みかん,15,100,1500
2026/06/04,ぶどう,5,300,1500
2026/06/05,いちご,8,500,4000

よくある質問

Q
プレミアムライセンスは必要ですか?

不要です。Excel Online (Business)・データ操作・OneDrive for Business はいずれも標準コネクタで、プレミアム扱いの HTTP アクションなどは一切使いません。

Q
@odata.etag と ItemInternalId は消さないとダメですか?

用途次第です。CSV を人が見るだけ・自分の Excel に取り込むだけなら無視しても支障はありません。ただし、他システムへの取り込み用 CSV では列ズレやエラーの原因になるため、本記事の【応用①】で消しておくことを推奨します。

Q
BOM を付けると逆に困るケースはありますか?

あります。Excel で開く前提なら BOM 付きが便利ですが、取り込み先のシステムが「BOM なし UTF-8」を要求する場合、先頭の BOM が不正な文字として扱われることがあります。連携先の仕様に合わせて、BOM を付ける式にするかどうかを切り替えてください。

Q
手動ではなく定期的に自動実行したいです。

トリガーを「フローを手動でトリガーする」から「スケジュール済みクラウド フロー(Recurrence)」に置き換えるだけで、毎日・毎時など定期実行にできます。それ以外の 3 アクションはそのまま使えます。

Q
同じ名前のファイルを毎回上書きしてしまいます。

「ファイルの作成」のファイル名に日時を入れると、実行ごとに別ファイルとして保存できます。例:concat('output_', formatDateTime(addHours(utcNow(), 9), 'yyyyMMdd'), '.csv') のように式で組み立てます。

まとめ

Power Automate で Excel を CSV に変換する基本は、「表内に存在する行を一覧表示」→「CSVテーブルの作成」→「ファイルの作成」の 3 ステップです。標準コネクタだけで、プレミアムライセンスは要りません。

そして実運用で効いてくるのが、本記事の応用編です。

  • 余分な列対策:Columns を「カスタム」にして、出力したい列だけを指定する
  • 文字化け対策:ファイル コンテンツを concat(uriComponentToString('%EF%BB%BF'), body('CSV_テーブルの作成')) にして BOM 付き UTF-8 にする

この 2 点を押さえておけば、「他システムにそのまま取り込める」「Excel でそのまま開ける」実用的な CSV 出力フローになります。まずは手動トリガーで作って動作を確認し、慣れてきたらスケジュール実行やメール添付など、自分の業務に合わせて拡張してみてください。

記事URLをコピーしました