毎月のCSV集計をAIに任せる|Python初心者のレシピ

毎月届く経費や売上のCSVを、1つにまとめて費目ごとに合計する作業を、AIに書いてもらったPythonスクリプトで自動にします。AIに送る文面、実際に出たエラーと直し方、Excelで文字化けさせないコツまで。

AI(Claude)が書き、運営者が確認して公開した記事です。分担と確かめたもの →

目次

毎月、いくつかの CSV ファイル(カンマ区切りの表のファイル)をコピーして1枚に貼り合わせ、費目ごとに合計を出す。この手作業は、AI にスクリプト(パソコンに作業をさせる短いプログラム)を書いてもらうと、翌月からはコマンド1行で終わります。

このレシピは、AI(Claude)が作って動かした記録です。AIが架空の経費データを3か月分作り、AIチャットに送る文面を決め、わざと文字コードのエラーを起こして直し、最後に集計表を書き出すところまでを実行しました。

このレシピで手に入るもの

  • input フォルダに月ごとの CSV を入れて実行すると、費目ごと・月ごとの合計表(summary.csv)ができる
  • Excel で「CSV UTF-8」と「CSV(コンマ区切り)」のどちらで保存したファイルが混ざっていても読める
  • できた summary.csv は、Excel で開いたときに文字化けしにくい形式(BOM 付き UTF-8)で書き出される

実際にできた表は次のとおりです(中身はすべて架空のサンプルです)。

表: このレシピで手に入るもの
費目 2026-07 2026-08 2026-09 合計
通信費 5500 5500 5500 16500
消耗品 2980 1650 4400 9030
会議費 3300 1980 2750 8030
交通費 2100 2100 2160 6360
合計 13880 11230 14810 39920

作ったファイルはすべてこのサイトで見られます。

時間の目安

AI(Claude)の作業は、サンプル作りの開始から完成版の実行が終わるまで1分かかりませんでした(制作記録では約42秒)。人が初めてやる場合は、Python を入れる時間と、AI とのやりとりを含めて30分ほどを見込んでください。この30分は目安で、人が実際に試して測った値ではありません。

用意するもの

表: 用意するもの
もの 内容
Windows のパソコン AI(Claude)は Windows 11 で動かしました
Python 無料。入れ方は下の「STEP 1」
AIチャット Claude・ChatGPT など、文章で頼めるもの
月ごとの CSV 列の名前がどの月も同じであること。最初はこのページのサンプルで試す

STEP 0:AIチャットを開く

ふだん使っている AIチャットがあれば、それで足ります。まだ無い人は、登録の要否や費用も含めて「生成AIで何ができる?」の「AIチャットの始め方」を先に読んでください。このレシピで AI に頼むのは、文章を3回送るだけです。

STEP 1:Python を入れる

Python(パイソン)は、スクリプトを動かすためのソフトです。ここでは python.org から入れる1本の道だけを書きます。

  1. スタートメニューで「Microsoft Store」を開き、「Python Install Manager」(インストールマネージャー)を探して、インストールのボタンを押す。python.org の Windows 用ダウンロードページから同じものをダウンロードして開いてもかまいません
  2. 入れ終わったら、スタートメニューで「ターミナル」を開き、python --version と打つ
  3. 初めて Python 本体を入れるときに、PATH(コマンドを探す場所の一覧)にフォルダを追加するか聞かれることがあります。そのときは追加するほうを選ぶ。質問が英語で意味が分からなければ、その文をそのまま AI に貼って「どう答えればいいですか」と聞く

Python 3.14.8 のようにバージョンが出れば、入っていると判断できます(公式の案内ではない確かめ方です。数字は入れた時期で変わります)。2026年10月1日時点の最新版は 3.14.8 で、AI(Claude)は 3.12 系で動かしました。このスクリプトは標準ライブラリ(Python に最初から入っている部品)だけで書いてあるので、どちらでも動きます。

この入れ方は、Python の公式ドキュメント(Windows で Python を使う、2026年10月1日時点)が案内しているものです。Microsoft Store 版と python.org 版について、公式ドキュメントは「2つは同じもの」と書いています。公式ドキュメントの説明は手順1と3です。手順2の python --version は公式の案内ではなく、入ったかを確かめるための一般的な打ち方です。Install Manager で入れた直後にどう表示されるかは、AI(Claude)は確かめていません。

⚠️ バージョンが出ずにエラーが出たときは、そのエラー文をそのまま AI に貼って「Python を入れたのに python --version でこうなりました」と聞いてください。公式ドキュメントの同じページにも「Troubleshooting」(うまくいかないとき)の章があります。AI(Claude)が動かしたのは Windows 11 だけで、Mac では入れ方も実行も試していません。

作り方:AI に送る文面とその結果

1. 作業用のフォルダを作り、サンプルを入れる

デスクトップなどに csv_matome のようなフォルダを作り、その中に input フォルダを作ります。input に月ごとの CSV を入れます。

最初は、このページの7月・8月・9月のサンプルを右クリックし、「名前を付けてリンク先を保存」で input に保存して試してください。8月のファイルはブラウザで開くと文字化けして見えることがありますが、壊れてはいません(理由は下の「4.」で説明します)。

サンプルは、列が「日付,費目,金額,メモ」の経費データ3か月分です。実際の会社のデータではなく、メモ欄もすべて「サンプル:〜」にしてあります。3つのファイルは Excel では保存しておらず、Excel の保存形式で起きる文字コードの違いを、AI(Claude)が Python で再現して作りました。

2. AI に頼む

AIチャットに送る文面は次のとおりです。このレシピでは、AI(Claude)がこの文面を自分に出し、その答えとしてコードを書きました。ポイントは、列の名前・日付の形・ファイルの置き場所・Excel で開くことを最初に伝えることです。AI はファイルの中身を見ていないので、ここを書かないと推測で作られます。

AIに送る文
Pythonでスクリプトを書いてください。プログラミングは初心者です。
input フォルダに、毎月の経費のCSVファイルが入っています(1か月1ファイル)。
列は「日付,費目,金額,メモ」です。日付は 2026/07/03 の形です。
全部のファイルを読んで、費目ごとの金額の合計を summary.csv に書き出したいです。
・Python の標準ライブラリだけで動くようにしてください
・CSV は Excel で作ったものです。summary.csv も Excel で開きます

返ってきたコードは、次の手順で summarize.py として保存します。

  1. AI の答えのうち、コードの囲み(灰色などの枠)の中だけをコピーする。説明の文まで一緒に貼ると動かない。コピー用のボタンがあれば、それを使うと範囲を間違えない
  2. メモ帳に貼り付け、「名前を付けて保存」を選ぶ
  3. 保存先は input と同じ階層。ファイル名は summarize.py、「ファイルの種類」は「すべてのファイル」、「エンコード」は「UTF-8」にする

ファイル名の最後が summarize.py.txt になっていると動きません。

3. 動かす

csv_matome フォルダの中で右クリックして「ターミナルで開く」を選び、次のように打ちます。

AIに送る文
python summarize.py

4. 実際に出たエラーを AI に貼る

エラーが出ずに summary.csv ができたら、この 4. は飛ばして 5. へ進んでください。別のエラーが出たときも、下と同じようにエラー文をそのまま貼ります。

AI(Claude)の1回目は、文字コード(文字をファイルに保存するときの決まり)を UTF-8 だけと想定したコードでした。動かすと、8月のファイルで止まりました。

アプリの画面に出る結果(AIには送らない)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 0: invalid start byte

8月のファイルだけ、Excel の「CSV(コンマ区切り)」で保存した場合に多い Shift_JIS 系の文字コード(Python では cp932)で作ってあったためです。このサンプルは、よくある文字化けのエラーを再現するために、AI(Claude)がわざとこの文字コードで作りました。日本語の Windows では、Excel の保存の種類によって文字コードが変わることがあります。

エラーは、そのまま AI に貼ると直す場所が伝わりやすくなります。

AIに送る文
実行したら、次のエラーが出ました。どう直せばいいですか。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x93 in position 0: invalid start byte
8月のファイルだけ、Excel で「CSV(コンマ区切り)」を選んで保存したかもしれません。

直し方は「まず UTF-8 で読み、読めなければ cp932 で読み直す」でした。読み込み部分がこの形になると、どちらの保存方法のファイルが混ざっていても止まらなくなります。

5. 使いやすく直してもらう

動いたら、ほしい形を足していきます。一度に全部頼むより、動くものを先に作ってから足すほうが、どこで壊れたかが分かりやすくなります。

AIに送る文
動きました。ありがとうございます。次の3つを足してください。
・月ごとの列(2026-07, 2026-08, …)と、横の合計の列
・いちばん下に「合計」の行
・金額が多い費目から順に並べる

完成版を動かしたときの表示です。どのファイルをどの文字コードで読んだかが出るようにしてあります。

アプリの画面に出る結果(AIには送らない)
読み込み: sample_keihi_2026-07.csv(utf-8-sig・5行)
読み込み: sample_keihi_2026-08.csv(cp932・4行)
読み込み: sample_keihi_2026-09.csv(utf-8-sig・5行)
できあがり: summary.csv(費目 4件・3か月分)

来月からの使い方

  1. 新しい月の CSV を input フォルダに入れる(ファイル名に 2026-10 のように年月を入れておくと、「読み込み:」の表示が月の順に並びます。集計表の月の列は、中身の日付で並べ直されます)
  2. フォルダでターミナルを開き、python summarize.py と打つ
  3. できた summary.csv を Excel で開く

summary.csv は毎回上書きされます。前の月の結果を残したいときは、実行する前に名前を変えておくと安心です。列の名前が変わった月があると止まるので、そのときはエラーを AI に貼って直してもらいます。

中身の説明(読まなくても動きます)

全体(49行)は summarize.py で見られます。要になるのは次の2か所です。

ファイルを読む部分。utf-8-sig は、先頭に BOM(「この文字コードは UTF-8」という目印の3バイト)があれば読み飛ばし、無くても普通の UTF-8 として読みます(Python の codecs の説明)。それで読めなければ cp932 を試します。

python
def read_rows(path):
    """Excelの「CSV UTF-8」と「CSV(コンマ区切り)」のどちらで保存したファイルも読む"""
    for encoding in ("utf-8-sig", "cp932"):
        try:
            with open(path, encoding=encoding, newline="") as f:
                return list(csv.DictReader(f)), encoding
        except UnicodeDecodeError:
            continue
    raise SystemExit(f"{path.name} の文字コードが読めませんでした")

newline="" は、Python の csv モジュールの説明が CSV を開くときに指定するよう求めている設定です。指定しないと、セルの中の改行がうまく読めないことがあります。

書き出す部分。encoding="utf-8-sig" にすると先頭に BOM が付きます。Microsoft のサポートページ(Excel で CSV UTF-8 ファイルを正しく開く)は、BOM 付きで保存された UTF-8 の CSV は Excel で普通に開ける、と説明しています。

コードの一部(書き換える場所)
with open(OUTPUT, "w", encoding="utf-8-sig", newline="") as f:

summary.csv を Excel で開いての確認は、AI(Claude)はしていません。ファイルの先頭に BOM の3バイトが付いていることは確かめました。最初の1回は、あなたの Excel で開いて、費目の文字が化けていないかを見てください。

気をつけること

本物の会社のデータを AIチャットに貼らない

AI に頼むときに渡すのは、列の名前と、作り物の数行だけで足ります。スクリプトはあなたのパソコンの中で動くので、本物のデータを AI に見せる必要はありません。

個人情報保護委員会の生成AIサービスの利用に関する注意喚起(2023年6月2日)は、入力した個人情報が機械学習に使われ、ほかの情報と結びついて出力されるリスクを挙げ、サービスの利用規約やプライバシーポリシーを確かめてから判断するよう呼びかけています。取引先の名前や金額のような会社の情報は、個人情報でなくても勤務先のルールが先です。AI ツールの利用を勤務先が認めているかも、始める前に確かめてください。

エラーを貼るときも、エラー文の中にファイルの中身が出ていないかを先に見てください。AI を使う前の注意点(間違い・個人情報・規約)のまとめは「生成AIで何ができる?」です。

最初の1回は手で検算する

スクリプトの計算は、最初の1回だけ電卓や Excel の SUM で確かめてください。AI(Claude)も、別のコードで3ファイルの金額をすべて足して 39,920 円で一致すること、7月の交通費が 1,240+860=2,100 円になることを確かめました。

確かめておきたいのは次の4点です。

  • 金額の書き方。"1,240" のように引用符で囲まれたカンマはこのスクリプトで外せますが、囲まれていないと列がずれて金額がおかしくなります。「円」が付いていると止まります
  • 費目の書き方の揺れ(「交通費」と「交通 費」は別の費目として数えられます)
  • 途中に合計行や小計行がある CSV。スクリプトは止まらずに、その金額まで足してしまい、総計が二重になります
  • 空に見える行。何も書いていない空の行は読み飛ばされます。ただし ,,, のようにカンマだけが並んだ行は、金額が空なので ValueError: invalid literal for int() with base 10: '' というエラーで止まります(AI(Claude)がサンプルにこの行を1行足して確かめました)。見た目は空の行でも、ファイルの中ではカンマだけが並んでいることがあります

合計行の入った CSV は、input に入れる前に合計行を消してください。毎月消すのが手間なら、AI に次のように頼むとスクリプト側で飛ばせます。

AIに送る文
費目が「合計」や「小計」の行は、集計に入れずに読み飛ばすように直してください。

カンマだけの行で止まったときは、その行を消すか、AI に次のように頼みます。

AIに送る文
金額が空の行(カンマだけが並んだ行など)は、エラーで止めずに読み飛ばすように直してください。

この2つの頼み方は、AI(Claude)は試していません。直してもらったら、上の検算をもう一度してください。

次の一歩

  • 売上の CSV なら、AI に送る文面の「費目」を「商品名」や「担当」に変えるだけで同じ形の集計表になります
  • 集計表をグラフにしたいときは、summary.csv を Excel で開いてグラフを挿入するのが手早い方法です
  • たまった写真のファイル名をまとめて変えたいときは、同じく Python で動かす「写真のファイル名を撮影日と連番に一括で変える」へ
  • 画面で動く道具を作ってみたいときは、同じく AI に頼むだけで作れる「ポモドーロタイマーを作る」へ
  • 慣れてきたら、毎月くり返している作業の手順を文章で書き出し、そのまま AI に渡して、次にスクリプトにできる作業を探してみてください

作るのページで、ほかのカテゴリも見る →

この記事について

この記事でやった人

やったこと誰が
架空の経費データ3か月分を作る(8月だけわざと cp932 にする)AI(Claude)
AIチャットに送る文面3本を決めるAI(Claude)
文面を受けて Python スクリプトを書き、エラーを直す(AIチャットの役)AI(Claude)(文面を出したのと同じAIが自分で答えた)
Windows 11 で実行して summary.csv を作り、別のコードで合計39,920円を検算し、先頭の BOM を確かめるAI(Claude)
記録と記事を書くAI(Claude)
公開前の目視確認と公開の判断運営者

料金や仕様は変わることがあります。検証日より後の変更は、各サービスの公式情報で確かめてください。