【新連載】Python業務自動化 第2回 Excelデータ処理の完全ガイド

Python自動化

【新連載】Python業務自動化 第2回 Excelデータ処理の完全ガイド

こんにちは!「Python業務自動化」連載の第2回へようこそ。前回はPythonの環境構築と基本的な文法についておさらいしました。今回はいよいよ実務でもっとも登場頻度の高い「Excelデータ処理」に踏み込んでいきます。

毎日のように発生する「Excelファイルを開いて、集計して、別シートに転記する」といった作業は、実はPythonを使えば数行のコードで自動化できます。本記事では、代表的なライブラリであるopenpyxlとpandasの使い方を比較しながら、実際に動くサンプルコードを交えて丁寧に解説していきます。初心者の方でも安心して読み進められる内容になっていますので、ぜひ最後までお付き合いください。

1. openpyxlとpandas、それぞれの特徴と使い分け

Excelファイルを扱うPythonライブラリはいくつかありますが、業務自動化でよく使われるのが「openpyxl」と「pandas」です。まずはこの2つの違いを理解しておきましょう。

openpyxlとは

openpyxlは、Excelファイル(.xlsx)を直接読み書きするためのライブラリです。セルの色や罫線、フォントといった「見た目」まで細かく操作できるのが特徴です。請求書のフォーマットを維持したまま数値だけ更新する、といった作業に向いています。

pip install openpyxl

pandasとは

pandasはデータ分析用のライブラリですが、Excelファイルの読み込み・集計・加工が非常に得意です。表形式のデータを「DataFrame」というオブジェクトとして扱い、フィルタリングや集計処理を簡潔に記述できます。

pip install pandas openpyxl

pandasを使う場合も内部でopenpyxlを利用するため、両方インストールしておくと安心です。

使い分けの目安

  • 大量データの集計・分析をしたい → pandas
  • セルの装飾や既存フォーマットを維持したい → openpyxl
  • 両方組み合わせて使うことも多い

2. pandasでExcelデータを読み込む・書き出す

ここからは実際にコードを書きながら学んでいきましょう。まずはExcelファイルの読み込みからです。

Excelファイルの読み込み

import pandas as pd

# Excelファイルを読み込む
df = pd.read_excel("sales_data.xlsx", sheet_name="Sheet1")

# 先頭5行を表示して中身を確認
print(df.head())

pd.read_excel()を使うだけで、Excelの表がPythonの中で扱いやすいDataFrame形式に変換されます。sheet_nameを省略すると先頭のシートが読み込まれます。

複数シートをまとめて読み込む

# 全シートを辞書形式で取得
all_sheets = pd.read_excel("sales_data.xlsx", sheet_name=None)

for sheet_name, data in all_sheets.items():
    print(f"シート名: {sheet_name}")
    print(data.head())

sheet_name=Noneを指定すると、すべてのシートが「シート名: DataFrame」の辞書として取得できます。複数店舗の月次データなどを一括処理したいときに便利です。

加工したデータをExcelに書き出す

# 条件に合うデータだけを抽出
filtered_df = df[df["売上金額"] >= 10000]

# 新しいExcelファイルとして出力
filtered_df.to_excel("filtered_sales.xlsx", index=False, sheet_name="集計結果")

index=Falseを指定することで、不要な行番号が出力されずに済みます。実務でも頻出のオプションなので覚えておきましょう。

3. 実践編:売上データを集計する自動化スクリプト

ここまでの知識を組み合わせて、実際の業務でありそうな「月別・担当者別の売上集計」を自動化してみましょう。

サンプルデータの想定

以下のような列を持つExcelファイルを想定します。

  • 日付
  • 担当者名
  • 売上金額

集計スクリプト

import pandas as pd

# データ読み込み
df = pd.read_excel("sales_data.xlsx")

# 日付列を月単位に変換
df["月"] = pd.to_datetime(df["日付"]).dt.strftime("%Y-%m")

# 担当者別・月別に売上を集計
summary = df.groupby(["月", "担当者名"])["売上金額"].sum().reset_index()

# 集計結果をExcelに出力
summary.to_excel("monthly_summary.xlsx", index=False, sheet_name="月次集計")

print("集計が完了しました。")

コードのポイント解説

groupby()は、指定した列の値ごとにデータをグループ化してくれる非常に強力なメソッドです。今回は「月」と「担当者名」の組み合わせごとに売上金額を合計しています。これまでExcelの関数やピボットテーブルで手作業していた集計処理が、たった数行のコードで自動化できることが実感できるはずです。

4. つまずきやすいポイントとトラブルシューティング

初心者の方が最初にぶつかりやすいエラーとその対処法をまとめました。

「FileNotFoundError」が出る

Excelファイルのパスが間違っているか、Pythonの実行場所とファイルの場所が異なっている場合に発生します。ファイルパスは絶対パスで指定するか、スクリプトと同じフォルダにExcelファイルを置くと解決しやすくなります。

「ModuleNotFoundError: No module named ‘openpyxl’」が出る

pandasでExcelを読み書きするにはopenpyxlが内部的に必要です。以下のコマンドで再インストールしてみましょう。

pip install openpyxl

日本語の列名が文字化けする

基本的にpandasとopenpyxlの組み合わせでは文字化けは起きにくいですが、CSVファイルを経由する場合は文字コードの指定(encoding="utf-8-sig"など)を忘れずに行いましょう。

数値のはずが文字列として読み込まれる

Excel側でセルの書式が「文字列」になっていると、Pythonでも文字列として扱われます。pd.to_numeric()を使って明示的に数値型へ変換すると安全です。

df["売上金額"] = pd.to_numeric(df["売上金額"], errors="coerce")

まとめ

今回は「Excelデータ処理の完全ガイド」と題して、openpyxlとpandasの使い分けから、実際のデータ読み込み・加工・出力、そして売上集計の自動化スクリプトまで一通り解説しました。

ポイントを振り返ると以下の通りです。

  • 装飾を維持したいならopenpyxl、集計・分析ならpandasを使う
  • pd.read_excel()とto_excel()で読み書きは驚くほど簡単に行える
  • groupby()を使えば複雑な集計処理も数行で実現できる
  • よくあるエラーは事前に対処法を知っておけば怖くない

Excel業務の自動化は、日々の作業時間を大幅に削減できる強力な武器になります。次回はさらに一歩進んで、Excelファイルの装飾やグラフ作成を自動化する方法について解説していきます。お楽しみに!

\ 初心者から未経験でプロを目指す /

Pythonプログラミング マンツーマン詳細はこちら >

タイトルとURLをコピーしました