Power Queryで月別CSVを結合|フォルダーに置いて更新するだけで1つの表に
トレード記録を月ごとのCSVに分けて保存していると、集計のたびに貼り合わせる手間がかかります。ExcelのPower Queryを使うと、フォルダーに入れたCSVを1つの表にまとめ、新しい月のファイルを置いて[すべて更新]するだけで表が増える形にできます。この記事では、架空の記録を8月・9月・10月の3つのCSVに分けて、実際のExcelでまとめた結果と、使ったクエリ(M言語)を紹介します。
(確認:Microsoft 365 Excel(バージョン16.0、ビルド20430)で、2026年10月21日に実行。クエリの登録と読み込みはExcelを操作するプログラム(Python・pywin32)で行い、記事に載せたクエリの文字列をそのまま使いました。画面の名前は、インストールされているExcelとPower Queryの日本語の文字列(リソース)で確かめたものです。記録は乱数で作った架空のもので、実際の取引ではありません)
準備:専用のフォルダーと、同じ形のCSV
Microsoftのサポートページ(複数のファイルを含むフォルダーからデータをインポートする)には、結合するファイルを、無関係なファイルのない専用のフォルダーに入れること、各ファイルが同じ列見出し・データ型・列数(同じスキーマ)であることが、前提として書かれています。この記事では、次の形にしました。
- フォルダー:
C:\TradeLog\monthly - ファイル:
2026-08.csv(16件)、2026-09.csv(14件)。どちらも1行目が「決済日,銘柄,売買,ロット,損益」の、文字コードUTF-8(BOM付き)のCSV
クエリ(M言語)
次のクエリは、フォルダー内の拡張子が.csvのファイルだけを読み、1行目を見出しにして、全ファイルを縦につなげ、列の型(日付・数値)を決めます。どのファイルの行かが分かるように、ファイル名の列も残しています。
let
// フォルダー内のCSVをすべて読み、1つの表にまとめる
Source = Folder.Files("C:\TradeLog\monthly"),
CsvOnly = Table.SelectRows(Source, each Text.Lower([Extension]) = ".csv"),
Parsed = Table.AddColumn(CsvOnly, "Data", each
Table.PromoteHeaders(Csv.Document([Content], [Delimiter = ",", Encoding = 65001]), [PromoteAllScalars = true])),
Kept = Table.SelectColumns(Parsed, {"Name", "Data"}),
Expanded = Table.ExpandTableColumn(Kept, "Data", {"決済日", "銘柄", "売買", "ロット", "損益"}),
Typed = Table.TransformColumnTypes(Expanded, {{"決済日", type date}, {"ロット", type number}, {"損益", Int64.Type}}),
Renamed = Table.RenameColumns(Typed, {{"Name", "ファイル"}})
in
Renamed
入れ方は、[データ]→[データの取得]→[その他のソースから]→[空のクエリ]でPower Queryエディターを開き、[詳細エディター]に上のクエリを貼り付けて、[閉じて読み込む]を選びます。Csv.Document の Encoding = 65001 はUTF-8の指定で、Microsoftの関数の説明には、encodingでテキストのエンコードの種類を指定する、と書かれています。
画面の操作だけで作る方法もあります。[データ]→[データの取得]→[ファイルから]→[フォルダーから]でフォルダーを選び、[データの結合と変換]などを選ぶと、Excelが補助のクエリを自動で作ってまとめます。
実行結果
| 確かめたこと | 結果 |
|---|---|
| 読み込んだ行数(見出しを除く) | 30行(8月16件+9月14件) |
| 損益の合計 | 57,000(元の30件の合計と一致) |
| ファイル別の件数 | 2026-08.csv:16、2026-09.csv:14 |
| 決済日の型 | 日付(表示形式 yyyy/m/d)。BOM付きでも見出しの「決済日」は正しく読めた |
読み込まれた表の先頭と、月の境目は次のとおりです。
| ファイル | 決済日 | 銘柄 | 売買 | ロット | 損益 |
|---|---|---|---|---|---|
| 2026-08.csv | 2026/8/5 | EURUSD | 売り | 0.2 | -8000 |
| 2026-08.csv | 2026/8/29 | GBPJPY | 売り | 0.3 | 3000 |
| 2026-09.csv | 2026/9/1 | USDJPY | 売り | 0.2 | -18000 |
新しい月のファイルを足して、更新する
次に、同じフォルダーに 2026-10.csv(2件・合計1,000)と、関係のない メモ.txt を置き、ブックを開いて[すべて更新]しました。
| 確かめたこと | 結果 |
|---|---|
| 更新後の行数 | 32行(30+2) |
| 損益の合計 | 58,000(57,000+1,000) |
| 読み込まれたファイル | 2026-08.csv・2026-09.csv・2026-10.csv(メモ.txtは入らない) |
メモ.txtが入らなかったのは、クエリの2行目で拡張子が.csvのものだけに絞っているためです。画面の操作だけで作った場合は、この絞り込みが無いと、フォルダー内のすべてのファイルを読もうとします(サポートページの注意)。
うまくいかない時に見るところ
- 見出しが「Column1」などになる:1行目が見出しになっていない。CSVの1行目を確かめる
- 列が足りない・ずれる:月によって列の名前や数が違う。
Table.ExpandTableColumnは、指定した名前の列だけを取り出す - 文字化けする:CSVの文字コードと
Encodingが合っていない。UTF-8なら65001 - 日付や数値でエラーになる:「2026/08/05」以外の形(時刻付きなど)が混ざっている。型を決める行(Typed)で、どの列がエラーかを見る
MT5から書き出した取引履歴は、列の形やファイルの種類が違うため、そのままでは上のクエリは使えません。MT5の取引履歴の書き出し方はMT5の取引履歴を書き出す方法に、MT5のCSVの文字化けの原因はMT5でCSVが出力されない・文字化けする原因にまとめています。
まとめた表を集計につなぐ
読み込んだ表は、通常のテーブルとして使えます。銘柄別・月別の集計はピボットテーブルでトレード記録を集計する方法やSUMIFSなどの関数で行えます。Excelの集計をどこまで身につけるかは、トレード記録をExcelで集計する力とMOSにまとめています。
この記事で確かめていないこと
- Mac版のExcel・Web版のExcelでの動き
- 画面の操作だけで作った場合に、Excelが自動で作る補助のクエリの中身
- ファイルが数百・数千に増えた時の更新の時間
まとめ
- 月ごとのCSVを専用のフォルダーに入れ、Power Queryで1つの表にまとめると、新しい月のファイルを置いて[すべて更新]するだけで表が増える
- 架空の記録で、8月・9月の30件(合計57,000)が正しく1つになり、10月分を足した更新で32件(58,000)になった。拡張子で絞ったので、メモ.txtは入らなかった
- 各ファイルの列の形と文字コードを揃えるのが前提。うまくいかない時は、見出し・列名・文字コード・型の順に見る
本記事は、架空の記録でExcelの機能を確かめたものです。売買の判断や成績の評価を示すものではありません。

