毎月の売上や経費の集計を、Excelで手作業で続けている方は多いのではないでしょうか。
CSVを開いて、コピーして、貼り付けて、ピボットテーブルを作り直す…という作業です。
「月次集計を自動化したいけど、Power QueryとPythonのどっちがいいの?」
「自動化したあと、数字が合っているかどうやって確かめればいいの?」
どちらも名前はよく聞くので、迷ってしまいますよね。
この記事では、同じ2か月分のCSVを、Power QueryとPythonの両方で集計して比べる演習をご紹介します。
結果は、行数・除外した行・合計金額の3つで照らし合わせます。
読み終えるころには、自分の職場に合うのはどちらか、翌月からどう回せばいいかがわかるはずです。
演習用のサンプルデータも載せているので、ぜひ手を動かしながら読んでみてください!
先に結論|Power QueryとPythonの違い
まずは、2つの違いを表にまとめました。
| 項目 | Power Query | Python(pandas) |
| 使う場所 | Excelの中([データ]タブ) | Excelの外(コードを実行) |
| 準備 | Windows版のExcelがあればすぐ使える | Pythonとpandasのインストールが要る |
| 作り方 | 画面の操作を記録していく | コードを書く |
| 翌月の更新 | フォルダーにCSVを置いて[すべて更新] | フォルダーにCSVを置いて再実行 |
| 引き継ぎ | Excelを使える人なら触りやすい | コードを読める人が必要 |
| 得意なこと | 集計結果をそのままExcelで使う | 複雑な条件、大量のファイル、ほかの処理との組み合わせ |
迷ったら、Excelで完結する仕事はPower Query、Excelの外にも広げたいならPythonと考えるのがおすすめです。
ただ、表だけではピンとこないと思うので、実際に同じデータで比べてみましょう。
演習の準備|2か月分のサンプルCSV(例)
演習では、文房具を売るお店の売上データを使います。
ここで使うCSVは、演習のために作った架空のサンプルデータです。実在のお店や数字ではありません。
フォルダーとファイルの形
パソコンの中に「monthly_sales」というフォルダーを作り、次の2つのCSVを保存してください。
- sales_2026-10.csv(10月分)
- sales_2026-11.csv(11月分)
ファイル名に年月を入れておくと、あとで月ごとに集計しやすくなります。
文字コードは、UTF-8で保存してください。
sales_2026-10.csv(例)
注文日,店舗,商品,数量,単価,金額,状態
2026-10-01,本店,ノート,3,250,750,完了
2026-10-02,駅前店,ボールペン,10,120,1200,完了
2026-10-05,オンライン,ファイル,4,300,1200,完了
2026-10-08,本店,ボールペン,5,120,600,キャンセル
2026-10-12,駅前店,ノート,6,250,1500,完了
2026-10-15,オンライン,ノート,2,250,500,完了
2026-10-19,本店,ファイル,5,300,1500,完了
2026-10-22,駅前店,ファイル,2,300,600,キャンセル
2026-10-26,オンライン,ボールペン,8,120,960,完了
2026-10-30,本店,ノート,4,250,1000,完了
sales_2026-11.csv(例)
注文日,店舗,商品,数量,単価,金額,状態
2026-11-02,本店,ボールペン,6,120,720,完了
2026-11-04,オンライン,ノート,5,250,1250,完了
2026-11-06,駅前店,ファイル,3,300,900,完了
2026-11-09,本店,ファイル,2,300,600,完了
2026-11-11,駅前店,ボールペン,12,120,1440,完了
2026-11-14,オンライン,ファイル,1,300,300,キャンセル
2026-11-18,本店,ノート,7,250,1750,完了
2026-11-21,オンライン,ボールペン,9,120,1080,完了
2026-11-25,駅前店,ノート,4,250,1000,完了
2026-11-28,本店,ボールペン,3,120,360,完了
この演習のゴール
2つのCSVをまとめ、キャンセルの行を除いて、月ごと・店舗ごとの売上合計を出します。
答え合わせのために、先に「正しい数字」を決めておきましょう。
| 確認する項目 | 正しい数字 |
| 読み込んだ行数 | 20行(10行×2ファイル) |
| 除外する行(キャンセル) | 3行 |
| 集計に使う行 | 17行 |
| 売上合計(キャンセルを除く) | 17,710円 |
| 集計結果の行数(2か月×3店舗) | 6行 |
自動化で一番大事なのは、作り方よりも「合っているかを確かめる数字」を先に決めることです。
Power Queryで集計する手順
ここからは、Windows版のExcel(Microsoft 365)で操作する前提で進めます。
Mac版のExcelは、Power Queryで読み込める元データの一覧に「フォルダー」がありません。
Macの方は、後半のPythonの手順を試してみてください。
出典|Microsoft サポート(Excel for Mac でデータをインポートおよび整形する)
STEP1:フォルダーごと読み込む
新しいブックを開き、[データ]タブから[データの取得]を選びます。
続けて[ファイルから]、[フォルダーから]の順に選び、「monthly_sales」フォルダーを指定します。
フォルダーの中のファイルの一覧が出たら、2つのCSVが並んでいるか確かめてください。
STEP2:ファイルを結合する
一覧の画面の下にある[結合]から、[結合と変換]を選びます。
[ファイルの結合]の画面が開いたら、次の3つを確かめて[OK]を選びます。
- [サンプル ファイル]:最初のファイルのままでOK
- [ファイルの元]:UTF-8になっているか
- [区切り記号]:コンマになっているか
出典|Microsoft サポート(複数のファイルを含むフォルダーをインポートする)
Power Queryエディターが開き、2つのCSVが縦につながった表が表示されます。
一番左には「Source.Name」という列ができて、どのファイルの行かがわかるようになっています。
日本語が文字化けしていたら、どうすればいいの?
その場合は、CSVの文字コードと[ファイルの元]の設定が合っていない可能性があります。
社内のシステムから出したCSVは、Shift_JISのこともあるので、元のファイルを確かめてみましょう。
STEP3:行数と除外する行を確かめる
集計する前に、読み込んだ行数を確かめます。
[表示]タブで[列のプロファイル]をオンにして、「状態」の列を選んでください。
画面の下に、列の統計と値の分布が表示されます。
ここで、列の統計の件数が20、値の分布で「キャンセル」が3、「完了」が17ならOKです。
※既定では、上位1,000行をもとに表示されます。データが多いときは、画面の左下で全体に切り替えてください。出典|Microsoft Learn(データ プロファイル ツール)
「Source.Name」の列のフィルターを開いて、2つのファイル名が両方あるかも確かめておきましょう。
STEP4:キャンセルを除外する
「状態」の列見出しにある▼のアイコンを選びます。
一覧の「キャンセル」のチェックを外して、[OK]を選びます。
これで、キャンセルの3行が集計から外れます。
STEP5:月ごと・店舗ごとに集計する
[ホーム]タブの[グループ化]を選び、[詳細設定]に切り替えます。
1つ目のグループに「Source.Name」を選び、[グループ化の追加]で「店舗」を足します。
集計は、次の2つを設定します。
| 新しい列名 | 操作 | 列 |
| 件数 | 行のカウント | (指定なし) |
| 売上合計 | 合計 | 金額 |
出典|Microsoft Learn(行をグループ化または集計する)
[OK]を選ぶと、ファイル(月)と店舗の組み合わせごとに、6行の表ができます。
STEP6:Excelに読み込む
[ホーム]タブの[閉じて読み込む]を選ぶと、集計結果が新しいシートに表として出てきます。
画面の右の[クエリと接続]に、読み込んだ行数(6行)が表示されているかを確かめましょう。
最後に、売上合計の列を足して、17,710円になっていれば完成です。
Pythonで集計する手順
次は、同じCSVをPythonで集計します。
PythonはWindowsでもMacでも動くので、Macの方はこちらから試してみてください。
準備:Pythonとpandasを入れる
Python 3をインストールしたら、表のデータを扱うライブラリのpandasを入れます。
pip install pandas
この記事のコードは、pandas 2.3.3で動くことを確かめています。
コード:まとめて、除外して、集計する
「monthly_sales」フォルダーと同じ場所に、次の内容で「monthly_report.py」を保存します。
from pathlib import Path
import pandas as pd
folder = Path("monthly_sales") # CSVを置いたフォルダー
frames = []
for path in sorted(folder.glob("sales_*.csv")):
df = pd.read_csv(path, encoding="utf-8-sig")
df["ファイル名"] = path.name
frames.append(df)
print(f"{path.name}: {len(df)}行")
data = pd.concat(frames, ignore_index=True)
print(f"読み込み合計: {len(data)}行")
# 金額 = 数量 × 単価 になっていない行がないか確かめる
bad = data[data["金額"] != data["数量"] * data["単価"]]
print(f"金額が合わない行: {len(bad)}行")
# キャンセルを除外する
done = data[data["状態"] != "キャンセル"]
print(f"除外: {len(data) - len(done)}行 / 残り: {len(done)}行")
# ファイル名(=月)× 店舗で集計する
report = (
done.groupby(["ファイル名", "店舗"], as_index=False)
.agg(件数=("金額", "size"), 売上合計=("金額", "sum"))
)
print(report.to_string(index=False))
print(f"売上合計(全体): {done['金額'].sum():,}円")
report.to_csv("monthly_report.csv", index=False, encoding="utf-8-sig")
途中で行数を表示しているのは、Power QueryのSTEP3と同じ確認をするためです。
さらに、金額が「数量×単価」と合っているかも確かめています。
実行と結果
ターミナル(Windowsならコマンドプロンプトなど)で、次のように実行します。
python monthly_report.py
次のように表示されれば成功です。
sales_2026-10.csv: 10行
sales_2026-11.csv: 10行
読み込み合計: 20行
金額が合わない行: 0行
除外: 3行 / 残り: 17行
ファイル名 店舗 件数 売上合計
sales_2026-10.csv オンライン 3 2660
sales_2026-10.csv 本店 3 3250
sales_2026-10.csv 駅前店 2 2700
sales_2026-11.csv オンライン 2 2330
sales_2026-11.csv 本店 4 3430
sales_2026-11.csv 駅前店 3 3340
売上合計(全体): 17,710円
同じ場所に「monthly_report.csv」もできるので、Excelで開いて使えます。
※環境によっては「python」ではなく「python3」や「py」で実行します。
結果を比べる|行数・除外・合計の3つで照らし合わせる
Power QueryとPythonの結果を、最初に決めた「正しい数字」と並べてみましょう。
| 確認する項目 | 正しい数字 | Power Queryで見る場所 | Pythonで見る場所 |
| 読み込んだ行数 | 20行 | 列のプロファイル(STEP3) | 読み込み合計 |
| 除外する行 | 3行 | 値の分布の「キャンセル」 | 除外 |
| 集計に使う行 | 17行 | 値の分布の「完了」 | 残り |
| 集計結果の行数 | 6行 | クエリと接続 | 表の行数 |
| 売上合計 | 17,710円 | 売上合計の列の合計 | 売上合計(全体) |
店舗ごとの数字は、どちらでも次のようになります。
| 月 | 店舗 | 件数 | 売上合計 |
| 10月 | 本店 | 3 | 3,250円 |
| 10月 | 駅前店 | 2 | 2,700円 |
| 10月 | オンライン | 3 | 2,660円 |
| 11月 | 本店 | 4 | 3,430円 |
| 11月 | 駅前店 | 3 | 3,340円 |
| 11月 | オンライン | 2 | 2,330円 |
※架空のサンプルデータを集計した結果です。
表の並び順は、Power QueryとPythonで違うことがあります。
並び順が違っても、行数・除外・合計の3つが合っていれば、同じ集計ができていると判断できます。
逆に、どれか1つでもずれたら、ファイルの読み込み漏れや、除外の条件の違いを疑いましょう。
どちらを選ぶ?職場に合わせた選び方
同じ結果が出ることがわかったら、あとは職場に合うかどうかで選びます。
Power Queryが向いている人
- 集計結果を、そのままExcelのグラフや報告書に使う
- 集計の担当を、ほかの人に引き継ぐ可能性がある
- パソコンに新しいソフトを入れにくい職場で働いている
Pythonが向いている人
- Macを使っている、またはExcelを持っていない
- ファイルの数が多い、条件が複雑になりそう
- いずれはグラフ作りや分析まで、Pythonで広げたい
同じCSVで次に試せるPythonの課題は、こちらで紹介しています。
なお、Power Queryの操作は、Power BIでもほぼ同じ形で使えます。
Power BIまで学びたい方は、次の記事で講座と資格の違いを解説しています。
翌月の更新メモ|来月からはここだけ確認する
自動化は、作ったあとに毎月回せてこそ意味があります。
12月分のCSVが届いたときを例に、更新の手順をまとめました。
Power Queryの場合
- sales_2026-12.csv を、同じ「monthly_sales」フォルダーに保存する
- Excelを開き、[データ]タブの[すべて更新]を選ぶ(Ctrl+Alt+F5でも可)
- [クエリと接続]の行数が増えたか確かめる(12月も3店舗とも売上があれば9行)
- 前月までの売上合計が変わっていないか確かめる
Pythonの場合
- sales_2026-12.csv を、同じ「monthly_sales」フォルダーに保存する
- python monthly_report.py をもう一度実行する
- 読み込み合計が、12月分の行数だけ増えたか確かめる
- 除外の行数と、売上合計(全体)を前月のメモと比べる
出典|Microsoft サポート(Excel で外部データ接続を更新する)
どちらの場合も、次の3つは崩さないようにしてください。
- ファイル名の付け方(sales_年-月.csv)
- 列の名前と並び順
- 文字コード(UTF-8)
また、フォルダーには、集計するCSVだけを置きましょう。
Microsoftの案内でも、フォルダーに結合するファイルだけが入っていることが前提とされています。
出典|Microsoft Learn(CSV ファイルを結合する)
毎月の確認の数字は、次のような表にメモしておくと、ずれにすぐ気づけます。
| 月 | 読み込んだ行数 | 除外した行 | 集計に使った行 | 売上合計 |
| 10月 | 10行 | 2行 | 8行 | 8,610円 |
| 11月 | 10行 | 1行 | 9行 | 9,100円 |
| 12月 | (記入) | (記入) | (記入) | (記入) |
※架空のサンプルデータの数字です。
Courseraで、Power QueryやExcelの分析を学ぶなら
演習をやってみて、もっと体系的に学びたくなった方もいるでしょう。
オンライン学習サービスのCoursera(コーセラ)には、ExcelのPower Queryを学べる講座があります。
| 講座 | 提供 | レベル | 期間の目安 | 主な内容 |
| Excel Power Tools for Data Analysis | マッコーリー大学 | 中級 | 週10時間で2週間 | Power Query、Power Pivot、Power BI |
| Excel Skills for Business(専門講座) | マッコーリー大学 | 初級 | 週10時間で3か月 | Excelの基本から応用まで(4コース) |
出典|Coursera(Excel Power Tools for Data Analysis)、Coursera(Excel Skills for Business)
この記事の内容に近いのは、Excel Power Tools for Data Analysisです。
4つのモジュールのうち、2つがPower Queryでのデータの取り込みと変換にあてられています。
講座はWindows版のExcel 2016以降が前提で、Microsoft 365での受講がすすめられています。
Excelの操作そのものに自信がない方は、Excel Skills for Businessから始めるのがおすすめです。
CourseraでExcel Skills for Businessを見る
どちらも英語の講座ですが、字幕の言語には日本語が含まれています。
まとめ|まずは「確かめる数字」を決めてから自動化しよう
Excelの月次集計は、Power QueryでもPythonでも自動化できます。
どちらを使っても、行数・除外・合計の3つを決めて確かめれば、安心して毎月回せます。
この記事のポイントをおさらいしておきましょう。
- 同じCSVなら、Power QueryとPythonで同じ集計結果になる
- Power Queryは[フォルダーから]読み込み、[すべて更新]で翌月分を足せる
- PythonはMacでも動き、確認の数字を毎回表示できる
- 行数・除外した行・合計の3つで照らし合わせる
- ファイル名、列の並び、文字コードを毎月そろえる
「自分の職場のCSVでもうまくいくかな…」
という方も、まずはこの記事のサンプルCSVで一度動かしてみてください。
