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

はじめに
「Excel で管理しているデータを、別システムへの取り込み用に CSV ファイルとして書き出したい」——こうしたニーズはとても多いです。手作業で「名前を付けて保存 → CSV」を毎回やるのは面倒ですし、ファイルが増えるとミスも起きやすくなります。
本記事では、プレミアムライセンスなし・標準コネクタだけで、Excel のテーブルを CSV ファイルに自動変換する Power Automate フローを、実際の画面つきで最初から最後まで解説します。さらに、つまずきやすい「余分な列が混ざる問題」と「Excel で開くと日本語が文字化けする問題」の対策まで踏み込みます。
- Excel のデータを定期的に CSV へ書き出して別システムに取り込みたい
- プレミアムライセンスがなく、標準コネクタだけで作りたい
- 出力した CSV に
@odata.etagなど余計な列が混ざって困っている - 出力した CSV を Excel で開くと日本語が文字化けする
完成イメージ:このフローがやること
今回作るのは「OneDrive 上の Excel テーブルを読み取り、CSV ファイルとして同じ OneDrive に保存する」というシンプルなフローです。ボタンひとつ(手動トリガー)で実行でき、慣れればスケジュール実行やメール添付など、好きなトリガー・出力先に置き換えられます。

フロー全体の構成
フローは次の 4 つのアクションで構成します。使うコネクタはすべて標準(プレミアム不要)です。
- フローを手動でトリガーする(トリガー)… ボタンで実行
- 表内に存在する行を一覧表示(Excel Online (Business))… Excel テーブルを読み取る
- CSVテーブルの作成(データ操作)… 取得した行を CSV 形式の文字列に変換
- ファイルの作成(OneDrive for Business)… CSV を
output.csvとして保存
事前準備:変換元の Excel テーブル
変換元として、OneDrive for Business に sample-data.xlsx を置いておきます。ポイントは、データ範囲を「テーブル」として書式設定しておくことです(Excel で範囲を選択し「テーブルとして書式設定」)。Power Automate の「表内に存在する行を一覧表示」は、このテーブル単位でデータを読み取ります。
今回は次のようなテーブル(テーブル名:売上テーブル)を用意しました。
| 日付 | 商品名 | 数量 | 単価 | 合計 |
|---|---|---|---|---|
| 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 |
フローの作成手順
① インスタント クラウド フローを作成する
Power Automate(make.powerautomate.com)にアクセスし、左メニューの「作成」から「インスタント クラウド フロー」を選びます。トリガーには「フローを手動でトリガーする」を指定して作成すると、トリガーだけが置かれた空のキャンバスが開きます。

② Excel「表内に存在する行を一覧表示」を追加する
トリガーの下の「+」から新しいアクションを追加し、Excel Online (Business) の「表内に存在する行を一覧表示」を選びます。続いて、変換元のファイルとテーブルを指定します。
- 場所:OneDrive for Business
- ドキュメント ライブラリ:OneDrive(ドキュメント)
- ファイル:/sample-data.xlsx
- テーブル:売上テーブル

③ データ操作「CSVテーブルの作成」を追加する
次にデータ操作コネクタの「CSVテーブルの作成」を追加します。これが今回の主役で、取得した行データを CSV 形式の文字列に変換してくれます。
From(開始)に、ひとつ前のアクションの出力 value を指定します。動的コンテンツの一覧から「表内に存在する行を一覧表示」の value を選べば OK です。

④ OneDrive「ファイルの作成」を追加する
最後に OneDrive for Business の「ファイルの作成」を追加し、CSV を保存します。
- フォルダーのパス:/(ルート。任意のフォルダーで可)
- ファイル名:output.csv
- ファイル コンテンツ:「CSVテーブルの作成」の出力(Output)

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

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

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

OneDrive を開くと、ルートに output.csv が作成されています。これで Excel → 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.etag と ItemInternalId は、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 欄に / を入力して「動的なコンテンツを挿入する」から列名を選ぶと、自動で同じ式が入ります。

これで @odata.etag と ItemInternalId は出力されず、必要な 5 列だけのきれいな CSV になります。
【応用②】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_テーブルの作成'))
uriComponentToString('%EF%BB%BF')… UTF-8 の BOM(バイト列 EF BB BF)を文字として生成するbody('CSV_テーブルの作成')… 「CSVテーブルの作成」が出力した CSV 文字列concat(...)… BOM と CSV を連結し、「BOM 付き UTF-8 の CSV」にする
保存して再テストする
保存してもう一度テスト実行します。実行が成功し、output.csv が上書きされます。

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

最終的な 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よくある質問
- プレミアムライセンスは必要ですか?
不要です。Excel Online (Business)・データ操作・OneDrive for Business はいずれも標準コネクタで、プレミアム扱いの HTTP アクションなどは一切使いません。
- @odata.etag と ItemInternalId は消さないとダメですか?
用途次第です。CSV を人が見るだけ・自分の Excel に取り込むだけなら無視しても支障はありません。ただし、他システムへの取り込み用 CSV では列ズレやエラーの原因になるため、本記事の【応用①】で消しておくことを推奨します。
- BOM を付けると逆に困るケースはありますか?
あります。Excel で開く前提なら BOM 付きが便利ですが、取り込み先のシステムが「BOM なし UTF-8」を要求する場合、先頭の BOM が不正な文字として扱われることがあります。連携先の仕様に合わせて、BOM を付ける式にするかどうかを切り替えてください。
- 手動ではなく定期的に自動実行したいです。
トリガーを「フローを手動でトリガーする」から「スケジュール済みクラウド フロー(Recurrence)」に置き換えるだけで、毎日・毎時など定期実行にできます。それ以外の 3 アクションはそのまま使えます。
- 同じ名前のファイルを毎回上書きしてしまいます。
「ファイルの作成」のファイル名に日時を入れると、実行ごとに別ファイルとして保存できます。例:
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 出力フローになります。まずは手動トリガーで作って動作を確認し、慣れてきたらスケジュール実行やメール添付など、自分の業務に合わせて拡張してみてください。





