【Excel】Pythonで業務効率化!ExcelとPythonの連携方法

この記事は約13分で読めます。

今回は、EXCEL(エクセル)とPythonを連携させて業務効率化を図る方法を紹介します。
日常的なExcel作業に時間を要している方や、複数のExcelファイルを一括処理したい方に向けて、PythonによるExcel操作の基本から実践的な活用法まで解説します。

ExcelとPythonを連携する利点

Excelはビジネスシーンで広く使われているツールですが、繰り返し作業や大量データの処理には限界があります。一方、Pythonはプログラミング言語の中でも比較的習得しやすく、多様なライブラリが利用できるため、Excel作業の自動化に適しています。

ExcelとPythonを連携させることで、以下のような業務効率化が期待できます:

  • 複数のExcelファイルを一括で処理できる
  • 定型的な集計作業を自動化できる
  • 大量データの分析が容易になる
  • エラーの少ない正確な処理が可能になる
  • 作業時間を短縮できる

特に日常的にExcelを使用している場合、Pythonとの連携によって長時間かかっていた作業が短時間で完了するようになり、本来の業務に集中できるようになります。

Pythonの基本環境構築

PythonでExcelを操作するには、まず基本的な環境を整える必要があります。以下の手順で環境構築を行いましょう。

Pythonのインストール

公式サイト(python.org)から最新版のPythonをダウンロードしてインストールします。インストール時には「Add Python to PATH」にチェックを入れておくことで、コマンドプロンプトやターミナルからPythonを実行できるようになります。

必要なライブラリのインストール

PythonでExcelを操作するためのライブラリをインストールします。コマンドプロンプトやターミナルを開き、以下のコマンドを実行します。

Windowsの場合:

pip install openpyxl pandas xlwings

Macの場合:

pip3 install openpyxl pandas xlwings

これで基本的な環境構築は完了です。次に、各ライブラリの特徴と使い分けを解説します。

Excel操作用Pythonライブラリの種類と特徴

PythonでExcelを操作するためのライブラリはいくつかありますが、代表的なものとして「openpyxl」「pandas」「xlwings」の3つを紹介します。それぞれ特徴が異なるため、用途に応じて使い分けることが重要です。

openpyxl

openpyxlは、Excel 2010以降の.xlsxファイルの読み書きに対応したライブラリです。セルの書式設定や数式、グラフなどの高度な機能をサポートしており、Excelファイルを細かく操作したい場合に適しています。

openpyxlの特徴:

  • Excel形式のファイルを直接操作できる
  • セルの書式設定や数式をサポート
  • ExcelがインストールされていなくてもExcelファイルを扱える
  • 処理速度が比較的速い
  • Linuxなど、Windowsだけでなく様々な環境で使用可能

適している用途:

  • 新規にExcelファイルを作成する場合
  • 複数のExcelファイルからデータを抽出する場合
  • セルの書式や値を細かく設定したい場合

pandas

pandasは、データ分析に特化したライブラリで、Excelファイルの読み書きもサポートしています。データフレームという構造を使って効率的にデータ処理ができるため、大量データの分析や集計に向いています。

pandasの特徴:

  • データ分析に特化した機能が豊富
  • 大量データの高速処理が可能
  • Excel以外のCSVやデータベースなども扱える
  • グラフ作成などの可視化機能も充実
  • データフレームという構造でデータを扱いやすい

適している用途:

  • 大量データの分析や集計を行いたい場合
  • 複数の形式のデータを統一的に処理したい場合
  • データの可視化が必要な場合

xlwings

xlwingsは、インストール済みのExcelアプリケーションを直接操作するライブラリです。ExcelのVBAマクロのような操作が可能で、Excelの全機能にアクセスできます。

xlwingsの特徴:

  • Excelアプリケーションを直接操作できる
  • ExcelのVBAマクロとの連携も可能
  • 書式の保持や図形、コメントなど全ての要素を扱える
  • WindowsだけでなくMacにも対応
  • Excelファイルを開いた状態での操作が可能

適している用途:

  • Excelアプリケーションの機能をフルに活用したい場合
  • 既存のファイルの書式を保持したまま編集したい場合
  • VBAマクロと連携した処理を行いたい場合

Python in Excel(Excel内でのPython実行)

2024年9月にMicrosoftが正式リリースした「Python in Excel」機能は、Excel内でPythonコードを直接実行できる機能です。この機能を使うと、Excel内でPythonの強力なデータ分析機能やグラフ作成機能を利用できます。

Python in Excelの特徴:

  • Excelのセル内でPythonコードを実行できる
  • Excelのデータを直接Pythonで処理可能
  • pandasやMatplotlibなどの主要ライブラリが使用可能
  • Microsoft Cloud上でコードが実行される

Python in Excelを使用するには、「=PY()」をセルに入力するか、「数式」タブの「Pythonの挿入」をクリックします。

基本的なExcel操作(openpyxlの場合)

ここでは、openpyxlを使った基本的なExcel操作の例を紹介します。

Excelファイルの読み込み

import openpyxl

# Excelファイルを開く
wb = openpyxl.load_workbook('sample.xlsx')

# アクティブなシートを取得
sheet = wb.active

# 特定のセルの値を取得
cell_value = sheet['A1'].value
print(cell_value)

# 行と列を指定してセルの値を取得
another_value = sheet.cell(row=2, column=3).value
print(another_value)

Excelファイルの作成と保存

import openpyxl

# 新規ワークブックを作成
wb = openpyxl.Workbook()

# アクティブなシートを取得
sheet = wb.active

# シート名を変更
sheet.title = "売上データ"

# セルに値を設定
sheet['A1'] = '商品名'
sheet['B1'] = '売上数'
sheet['C1'] = '単価'
sheet['D1'] = '合計'

# データを入力
products = [
    ['商品A', 10, 1000],
    ['商品B', 5, 2000],
    ['商品C', 8, 1500]
]

for i, (name, quantity, price) in enumerate(products, start=2):
    sheet.cell(row=i, column=1, value=name)
    sheet.cell(row=i, column=2, value=quantity)
    sheet.cell(row=i, column=3, value=price)
    sheet.cell(row=i, column=4, value=f'=B{i}*C{i}')

# ファイルを保存
wb.save('新規売上.xlsx')

データ分析例(pandasの場合)

pandasを使ったExcelデータの分析例を紹介します。

import pandas as pd
import matplotlib.pyplot as plt

# Excelファイルを読み込み
df = pd.read_excel('売上データ.xlsx')

# 基本的な統計情報を表示
print(df.describe())

# 商品ごとの売上合計を集計
sales_by_product = df.groupby('商品名')['売上'].sum().sort_values(ascending=False)
print(sales_by_product)

# グラフの作成
plt.figure(figsize=(10, 6))
sales_by_product.plot(kind='bar')
plt.title('商品別売上合計')
plt.xlabel('商品名')
plt.ylabel('売上金額')
plt.grid(axis='y')
plt.tight_layout()

# グラフを保存
plt.savefig('商品別売上.png')

# 分析結果をExcelに出力
with pd.ExcelWriter('売上分析結果.xlsx') as writer:
    df.describe().to_excel(writer, sheet_name='基本統計')
    sales_by_product.to_excel(writer, sheet_name='商品別売上')

実践的な業務自動化例

ここでは、実際の業務で役立つ自動化例を紹介します。

複数のExcelファイルの一括処理

import os
import pandas as pd

# 処理対象のフォルダパス
folder_path = '売上データ/'

# 結果を格納するデータフレーム
all_data = pd.DataFrame()

# フォルダ内のすべてのExcelファイルを処理
for filename in os.listdir(folder_path):
    if filename.endswith('.xlsx') or filename.endswith('.xls'):
        file_path = os.path.join(folder_path, filename)
        
        # ファイル名から年月を抽出(例:sales_202501.xlsx → 2025年1月)
        year_month = filename.replace('sales_', '').replace('.xlsx', '')
        year = year_month[:4]
        month = year_month[4:]
        
        # Excelファイルを読み込む
        df = pd.read_excel(file_path)
        
        # 年月の列を追加
        df['年'] = year
        df['月'] = month
        
        # 全体のデータフレームに追加
        all_data = pd.concat([all_data, df], ignore_index=True)

# 月次の売上集計
monthly_sales = all_data.groupby(['年', '月'])['売上'].sum()
print(monthly_sales)

# 結果をExcelファイルに保存
monthly_sales.to_excel('月次売上集計.xlsx')

定期レポートの自動生成

import pandas as pd
import matplotlib.pyplot as plt
from openpyxl import Workbook
from openpyxl.drawing.image import Image
from openpyxl.styles import Font, Alignment, PatternFill
import datetime

# 現在の日付を取得
today = datetime.datetime.now().strftime('%Y%m%d')

# データの読み込み
df = pd.read_excel('月間データ.xlsx')

# データ分析
total_sales = df['売上'].sum()
average_sales = df['売上'].mean()
max_sales = df['売上'].max()
max_sales_date = df.loc[df['売上'].idxmax(), '日付']

# グラフの作成
plt.figure(figsize=(10, 6))
df.plot(x='日付', y='売上', kind='line', marker='o')
plt.title('月間売上推移')
plt.xlabel('日付')
plt.ylabel('売上金額')
plt.grid()
plt.tight_layout()

# グラフを保存
graph_file = f'売上推移_{today}.png'
plt.savefig(graph_file)

# レポートの作成
wb = Workbook()
ws = wb.active
ws.title = "月間レポート"

# タイトルと基本情報
ws['A1'] = f'月間売上レポート({today})'
ws['A1'].font = Font(size=16, bold=True)
ws['A3'] = '総売上:'
ws['B3'] = total_sales
ws['A4'] = '平均売上:'
ws['B4'] = average_sales
ws['A5'] = '最高売上:'
ws['B5'] = max_sales
ws['A6'] = '最高売上日:'
ws['B6'] = max_sales_date

# グラフの挿入
img = Image(graph_file)
ws.add_image(img, 'A8')

# レポートの保存
report_file = f'月間売上レポート_{today}.xlsx'
wb.save(report_file)

print(f'レポートが作成されました: {report_file}')

活用する際の注意点

PythonでExcelを操作する際の注意点をいくつか紹介します。

  • 大容量のExcelファイルを扱う場合は、メモリ使用量に注意しましょう。特にopenpyxlは全データをメモリに読み込むため、大きなファイルでは処理が遅くなったりメモリ不足になったりする可能性があります。
  • xlwingsはExcelアプリケーションを直接操作するため、処理速度がopenpyxlより遅くなる場合があります。特に、セルごとに操作を行うよりも、範囲指定して一括で操作する方が効率的です。
  • 既存のExcelファイルを上書き編集する場合、openpyxlではコメントや図形が保存されない、ファイル差分が多く検出されるなどの問題が生じる可能性があります。重要なファイルを編集する場合はバックアップを取っておきましょう。
  • pandasは分析に特化していますが、複雑な書式設定などには対応していないため、最終的な見栄えを整えるには別のライブラリと組み合わせると良いでしょう。

まとめ

本記事では、ExcelとPythonを連携させて業務効率化を図る方法を紹介しました。Pythonの基本環境構築から始まり、各ライブラリの特徴や使い分け、基本的な操作方法、実践的な業務自動化例まで幅広く解説しました。

Excelとの連携には主に以下の選択肢があります:

  • openpyxl:Excel形式のファイルを直接操作できるライブラリ
  • pandas:データ分析に特化したライブラリ
  • xlwings:Excelアプリケーションを直接操作するライブラリ
  • Python in Excel:Excel内でPythonコードを実行する機能

これらを用途に応じて適切に使い分けることで、日常的なExcel作業の効率化、大量データの分析、レポートの自動生成など、様々な業務改善が可能になります。