【Python】エクセルの操作を自動化する方法

Pythonを使ってエクセルファイルを自動で操作できると、日々の業務がとても楽になります。

この記事では、Pythonを使ってエクセルファイルを読み込んだり、書き込んだり、編集したりする方法をわかりやすく解説します。

目次から探す

Pythonでエクセルを操作するための準備

Pythonを使ってエクセルファイルを操作するためには、いくつかのライブラリをインストールし、適切にインポートする必要があります。

ここでは、エクセル操作に役立つ主要なライブラリとそのインストール方法、そして基本的なインポート方法について解説します。

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

エクセル操作に役立つライブラリとして、以下の4つを紹介します。

openpyxl

openpyxlは、エクセルファイル(.xlsx形式)を読み書きするためのライブラリです。

セルの値の読み書きや、シートの追加・削除、セルのスタイル変更など、幅広い操作が可能です。

インストール方法は以下の通りです。

pip install openpyxl

pandas

pandasは、データ解析に特化したライブラリで、エクセルファイルの読み書きもサポートしています。

特に、データフレーム(DataFrame)を使ったデータ操作が強力です。

インストール方法は以下の通りです。

pip install pandas

xlrd

xlrdは、古いエクセルファイル(.xls形式)を読み込むためのライブラリです。

新しいエクセル形式(.xlsx)には対応していないため、主に古いファイルを扱う場合に使用します。

インストール方法は以下の通りです。

pip install xlrd

xlsxwriter

xlsxwriterは、エクセルファイル(.xlsx形式)を作成・書き込みするためのライブラリです。

特に、グラフの作成やセルのフォーマット設定が得意です。

インストール方法は以下の通りです。

pip install XlsxWriter

ライブラリのインポート

ライブラリをインストールしたら、次にPythonスクリプト内でこれらをインポートします。

基本的なインポート方法

以下は、各ライブラリをインポートする基本的な方法です。

import openpyxl
import pandas as pd
import xlrd
import xlsxwriter

各ライブラリの役割

各ライブラリの役割について簡単に説明します。

  • openpyxl: 主にエクセルファイル(.xlsx形式)の読み書きに使用します。

セルの値の操作やシートの管理、スタイルの設定などが可能です。

  • pandas: データ解析に特化しており、エクセルファイルの読み書きもサポートしています。

特にデータフレーム(DataFrame)を使ったデータ操作が強力です。

  • xlrd: 古いエクセルファイル(.xls形式)の読み込みに使用します。

新しい形式(.xlsx)には対応していないため、主に古いファイルを扱う場合に使用します。

  • xlsxwriter: エクセルファイル(.xlsx形式)の作成・書き込みに特化しています。

特に、グラフの作成やセルのフォーマット設定が得意です。

これで、Pythonを使ってエクセルファイルを操作するための準備が整いました。

次のステップでは、実際にエクセルファイルを読み込んだり、書き込んだりする方法について詳しく解説していきます。

エクセルファイルの読み込み

Pythonでエクセルファイルを読み込む方法はいくつかありますが、ここでは特に人気のあるライブラリであるopenpyxlとpandasを使った方法を紹介します。

openpyxlを使ったエクセルファイルの読み込み

openpyxlは、エクセルファイル(.xlsx形式)を読み書きするための強力なライブラリです。

まずは基本的な読み込み方法から見ていきましょう。

基本的な読み込み方法

openpyxlを使ってエクセルファイルを読み込むには、load_workbook関数を使用します。

以下に基本的なコード例を示します。

from openpyxl import load_workbook
# エクセルファイルを読み込む
workbook = load_workbook('example.xlsx')
# デフォルトのシートを取得
sheet = workbook.active
# セルの値を取得
cell_value = sheet['A1'].value
print(cell_value)

このコードでは、example.xlsxというエクセルファイルを読み込み、デフォルトのシートのA1セルの値を取得しています。

シートの選択方法

エクセルファイルには複数のシートが含まれていることが多いです。

特定のシートを選択する方法を見てみましょう。

from openpyxl import load_workbook
# エクセルファイルを読み込む
workbook = load_workbook('example.xlsx')
# シート名を指定してシートを取得
sheet = workbook['Sheet1']
# セルの値を取得
cell_value = sheet['B2'].value
print(cell_value)

このコードでは、Sheet1という名前のシートを選択し、そのシートのB2セルの値を取得しています。

pandasを使ったエクセルファイルの読み込み

pandasはデータ解析に特化したライブラリで、エクセルファイルの読み込みも非常に簡単に行えます。

特に、データをDataFrame形式で扱うことができるため、データ解析や操作が非常に便利です。

DataFrameへの変換

pandasを使ってエクセルファイルを読み込み、DataFrameに変換する方法を見てみましょう。

import pandas as pd
# エクセルファイルを読み込んでDataFrameに変換
df = pd.read_excel('example.xlsx')
# DataFrameの内容を表示
print(df)

このコードでは、example.xlsxというエクセルファイルを読み込み、その内容をDataFrameに変換しています。

DataFrameは、行と列で構成されるデータ構造で、非常に扱いやすいです。

複数シートの読み込み

エクセルファイルに複数のシートが含まれている場合、特定のシートを指定して読み込むこともできます。

import pandas as pd
# 特定のシートを指定して読み込む
df = pd.read_excel('example.xlsx', sheet_name='Sheet1')
# DataFrameの内容を表示
print(df)

このコードでは、Sheet1という名前のシートを指定して読み込んでいます。

また、複数のシートを一度に読み込むことも可能です。

import pandas as pd
# 複数のシートを読み込む
sheets = pd.read_excel('example.xlsx', sheet_name=None)
# 各シートのDataFrameを表示
for sheet_name, df in sheets.items():
    print(f'Sheet name: {sheet_name}')
    print(df)

このコードでは、エクセルファイル内のすべてのシートを読み込み、それぞれのシート名とDataFrameを表示しています。

以上が、openpyxlとpandasを使ったエクセルファイルの読み込み方法です。

次に、エクセルファイルの書き込み方法について解説します。

エクセルファイルの書き込み

エクセルファイルへの書き込みは、データの保存やレポート作成において非常に重要です。

Pythonを使えば、手動で行う煩雑な作業を自動化できます。

ここでは、openpyxlpandasを使ったエクセルファイルの書き込み方法について詳しく解説します。

openpyxlを使ったエクセルファイルの書き込み

新しいシートの追加

まずは、新しいシートを追加する方法を見てみましょう。

openpyxlを使えば、簡単に新しいシートを追加できます。

from openpyxl import Workbook
# 新しいワークブックを作成
wb = Workbook()
# デフォルトのシートを取得
default_sheet = wb.active
default_sheet.title = "デフォルトシート"
# 新しいシートを追加
new_sheet = wb.create_sheet(title="新しいシート")
# ファイルを保存
wb.save("example.xlsx")

このコードでは、新しいワークブックを作成し、デフォルトのシートの名前を変更した後、新しいシートを追加しています。

セルへのデータ書き込み

次に、セルにデータを書き込む方法を見てみましょう。

from openpyxl import Workbook
# 新しいワークブックを作成
wb = Workbook()
# デフォルトのシートを取得
sheet = wb.active
# セルにデータを書き込む
sheet["A1"] = "こんにちは"
sheet["B1"] = "Python"
sheet["A2"] = 123
sheet["B2"] = 456
# ファイルを保存
wb.save("example.xlsx")

このコードでは、セルA1B1に文字列データを、セルA2B2に数値データを書き込んでいます。

スタイルの適用

openpyxlを使えば、セルにスタイルを適用することもできます。

以下は、フォントの変更や背景色の設定を行う例です。

from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill
# 新しいワークブックを作成
wb = Workbook()
# デフォルトのシートを取得
sheet = wb.active
# セルにデータを書き込む
sheet["A1"] = "スタイル適用"
sheet["A1"].font = Font(size=14, bold=True, color="FF0000")
sheet["A1"].fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")
# ファイルを保存
wb.save("styled_example.xlsx")

このコードでは、セルA1にフォントサイズ14、太字、赤色のフォントを適用し、背景色を黄色に設定しています。

pandasを使ったエクセルファイルの書き込み

pandasを使えば、DataFrameをエクセルファイルに簡単に書き込むことができます。

DataFrameからエクセルへの書き込み

まずは、基本的なDataFrameからエクセルへの書き込み方法を見てみましょう。

import pandas as pd
# サンプルデータを作成
data = {
    "名前": ["太郎", "花子", "次郎"],
    "年齢": [25, 30, 22],
    "職業": ["エンジニア", "デザイナー", "マーケター"]
}
# DataFrameを作成
df = pd.DataFrame(data)
# DataFrameをエクセルファイルに書き込む
df.to_excel("pandas_example.xlsx", index=False)

このコードでは、サンプルデータをDataFrameに変換し、それをエクセルファイルに書き込んでいます。

複数シートへの書き込み

pandasを使えば、複数のシートにデータを書き込むことも可能です。

import pandas as pd
# サンプルデータを作成
data1 = {
    "名前": ["太郎", "花子", "次郎"],
    "年齢": [25, 30, 22],
    "職業": ["エンジニア", "デザイナー", "マーケター"]
}
data2 = {
    "商品": ["リンゴ", "バナナ", "オレンジ"],
    "価格": [100, 150, 200],
    "在庫": [50, 60, 70]
}
# DataFrameを作成
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
# 複数シートに書き込む
with pd.ExcelWriter("multiple_sheets_example.xlsx") as writer:
    df1.to_excel(writer, sheet_name="シート1", index=False)
    df2.to_excel(writer, sheet_name="シート2", index=False)

このコードでは、ExcelWriterを使って複数のDataFrameを異なるシートに書き込んでいます。

以上が、openpyxlpandasを使ったエクセルファイルの書き込み方法です。

これらの方法を使えば、エクセルファイルの操作を効率的に自動化することができます。

エクセルファイルの編集

エクセルファイルの編集は、データの更新やフォーマットの変更など、さまざまな操作が含まれます。

ここでは、Pythonを使ってエクセルファイルを編集する方法について詳しく解説します。

セルの値の変更

エクセルファイルのセルの値を変更する方法について、openpyxlpandasを使った方法を紹介します。

openpyxlを使ったセルの値の変更

openpyxlを使ってセルの値を変更するには、まずエクセルファイルを読み込み、特定のセルを指定して値を変更します。

以下はその具体例です。

import openpyxl
# エクセルファイルを読み込む
wb = openpyxl.load_workbook('example.xlsx')
sheet = wb.active
# セルの値を変更する
sheet['A1'] = '新しい値'
# エクセルファイルを保存する
wb.save('example_modified.xlsx')

このコードでは、example.xlsxというエクセルファイルのA1セルの値を「新しい値」に変更し、example_modified.xlsxという名前で保存しています。

pandasを使ったセルの値の変更

pandasを使ってセルの値を変更する場合、まずエクセルファイルをDataFrameとして読み込み、特定のセルの値を変更します。

以下はその具体例です。

import pandas as pd
# エクセルファイルを読み込む
df = pd.read_excel('example.xlsx')
# セルの値を変更する
df.at[0, 'A'] = '新しい値'
# エクセルファイルを保存する
df.to_excel('example_modified.xlsx', index=False)

このコードでは、example.xlsxというエクセルファイルの1行目のA列の値を「新しい値」に変更し、example_modified.xlsxという名前で保存しています。

セルのスタイル変更

セルのスタイルを変更することで、エクセルファイルの見た目を整えることができます。

ここでは、フォントの変更、背景色の変更、ボーダーの追加について解説します。

フォントの変更

openpyxlを使ってセルのフォントを変更する方法を紹介します。

from openpyxl.styles import Font
# フォントの設定
font = Font(name='Arial', size=14, bold=True, italic=True)
# セルにフォントを適用する
sheet['A1'].font = font
# エクセルファイルを保存する
wb.save('example_modified.xlsx')

このコードでは、A1セルのフォントをArial、サイズ14、太字、斜体に変更しています。

背景色の変更

セルの背景色を変更する方法を紹介します。

from openpyxl.styles import PatternFill
# 背景色の設定
fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
# セルに背景色を適用する
sheet['A1'].fill = fill
# エクセルファイルを保存する
wb.save('example_modified.xlsx')

このコードでは、A1セルの背景色を黄色に変更しています。

ボーダーの追加

セルにボーダーを追加する方法を紹介します。

from openpyxl.styles import Border, Side
# ボーダーの設定
border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin'))
# セルにボーダーを適用する
sheet['A1'].border = border
# エクセルファイルを保存する
wb.save('example_modified.xlsx')

このコードでは、A1セルに薄い線のボーダーを追加しています。

行や列の操作

行や列の挿入・削除、非表示・表示などの操作について解説します。

行や列の挿入・削除

行や列を挿入・削除する方法を紹介します。

# 行を挿入する(2行目に1行挿入)
sheet.insert_rows(2)
# 列を挿入する(B列に1列挿入)
sheet.insert_cols(2)
# 行を削除する(2行目を削除)
sheet.delete_rows(2)
# 列を削除する(B列を削除)
sheet.delete_cols(2)
# エクセルファイルを保存する
wb.save('example_modified.xlsx')

このコードでは、2行目に1行挿入、B列に1列挿入、2行目を削除、B列を削除する操作を行っています。

行や列の非表示・表示

行や列を非表示・表示する方法を紹介します。

# 行を非表示にする(2行目を非表示)
sheet.row_dimensions[2].hidden = True
# 列を非表示にする(B列を非表示)
sheet.column_dimensions['B'].hidden = True
# 行を表示する(2行目を表示)
sheet.row_dimensions[2].hidden = False
# 列を表示する(B列を表示)
sheet.column_dimensions['B'].hidden = False
# エクセルファイルを保存する
wb.save('example_modified.xlsx')

このコードでは、2行目とB列を非表示にし、その後再度表示する操作を行っています。

以上が、Pythonを使ったエクセルファイルの編集方法です。

これらの操作を組み合わせることで、エクセルファイルの自動化が可能になります。

エクセルファイルの保存と出力

エクセルファイルを操作した後は、変更内容を保存する必要があります。

Pythonでは、openpyxlやpandasを使ってエクセルファイルを簡単に保存することができます。

また、エクセルファイルを他の形式に変換することも可能です。

ここでは、ファイルの保存方法と形式の変換について詳しく解説します。

ファイルの保存方法

openpyxlを使った保存方法

openpyxlを使ってエクセルファイルを保存する方法は非常にシンプルです。

以下のコード例では、既存のエクセルファイルを読み込み、変更を加えた後に保存する方法を示します。

from openpyxl import Workbook
# 新しいワークブックを作成
wb = Workbook()
# アクティブなシートを取得
ws = wb.active
# データを書き込む
ws['A1'] = 'Hello'
ws['B1'] = 'World'
# ファイルを保存
wb.save('example.xlsx')

このコードでは、新しいワークブックを作成し、セルA1とB1にデータを書き込んでから、example.xlsxという名前で保存しています。

pandasを使った保存方法

pandasを使ってエクセルファイルを保存する方法も非常に簡単です。

pandasのDataFrameをエクセルファイルとして保存するには、to_excelメソッドを使用します。

import pandas as pd
# サンプルデータを作成
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35]
}
# DataFrameを作成
df = pd.DataFrame(data)
# DataFrameをエクセルファイルとして保存
df.to_excel('example_pandas.xlsx', index=False)

このコードでは、サンプルデータを含むDataFrameを作成し、example_pandas.xlsxという名前で保存しています。

index=Falseを指定することで、インデックスをエクセルファイルに含めないようにしています。

ファイル形式の変換

エクセルファイルを他の形式に変換することも可能です。

ここでは、エクセルファイルをCSV形式や他のエクセル形式に変換する方法を紹介します。

CSVへの変換

pandasを使ってエクセルファイルをCSV形式に変換する方法は非常に簡単です。

以下のコード例では、エクセルファイルを読み込み、CSV形式で保存する方法を示します。

import pandas as pd
# エクセルファイルを読み込む
df = pd.read_excel('example_pandas.xlsx')
# DataFrameをCSVファイルとして保存
df.to_csv('example.csv', index=False)

このコードでは、example_pandas.xlsxというエクセルファイルを読み込み、example.csvという名前でCSV形式で保存しています。

他のエクセル形式への変換

openpyxlを使ってエクセルファイルを他のエクセル形式に変換することも可能です。

例えば、既存のエクセルファイルを新しい形式で保存する場合、以下のようにします。

from openpyxl import load_workbook
# 既存のエクセルファイルを読み込む
wb = load_workbook('example.xlsx')
# 新しい名前で保存
wb.save('example_new_format.xlsx')

このコードでは、example.xlsxという既存のエクセルファイルを読み込み、example_new_format.xlsxという新しい名前で保存しています。

以上が、エクセルファイルの保存と出力に関する基本的な方法です。

これらの方法を使って、エクセルファイルの操作を効率的に自動化することができます。

実践的な自動化シナリオ

ここでは、Pythonを使ってエクセルの操作を自動化する具体的なシナリオを紹介します。

データの集計やレポート作成、定期的なデータ更新、グラフの作成と更新など、実際の業務で役立つ例を取り上げます。

データの集計とレポート作成

複数ファイルからのデータ集計

複数のエクセルファイルからデータを集計する方法を紹介します。

例えば、各月の売上データが別々のファイルに保存されている場合、それらを一つのファイルにまとめて集計することができます。

import pandas as pd
import glob
# 複数のエクセルファイルを読み込む
file_paths = glob.glob('data/*.xlsx')
data_frames = [pd.read_excel(file) for file in file_paths]
# データを結合する
combined_data = pd.concat(data_frames)
# 集計処理(例:売上の合計を計算)
summary = combined_data.groupby('商品名')['売上'].sum().reset_index()
# 結果を表示
print(summary)

集計結果のエクセルへの出力

集計結果をエクセルファイルに出力する方法を紹介します。

上記の集計結果を新しいエクセルファイルに保存します。

# 集計結果をエクセルファイルに保存
summary.to_excel('summary.xlsx', index=False)

定期的なデータ更新

スケジューリングの方法

定期的にデータを更新するためには、スケジューリングツールを使用します。

Pythonでは、scheduleライブラリを使って簡単にスケジューリングが可能です。

import schedule
import time
def job():
    print("データを更新中...")
# 毎日午前9時にジョブを実行
schedule.every().day.at("09:00").do(job)
while True:
    schedule.run_pending()
    time.sleep(1)

自動化スクリプトの実行

スケジューリングされたジョブが実行されると、指定されたスクリプトが自動的に実行されます。

例えば、データの集計とエクセルへの出力を自動化するスクリプトを実行します。

def update_data():
    # データの集計とエクセルへの出力
    file_paths = glob.glob('data/*.xlsx')
    data_frames = [pd.read_excel(file) for file in file_paths]
    combined_data = pd.concat(data_frames)
    summary = combined_data.groupby('商品名')['売上'].sum().reset_index()
    summary.to_excel('summary.xlsx', index=False)
    print("データ更新完了")
# 毎日午前9時にデータを更新
schedule.every().day.at("09:00").do(update_data)

グラフの作成と更新

openpyxlを使ったグラフの作成

openpyxlを使ってエクセルファイルにグラフを追加する方法を紹介します。

以下の例では、売上データを基に棒グラフを作成します。

from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
# 新しいエクセルファイルを作成
wb = Workbook()
ws = wb.active
# データを追加
data = [
    ['商品名', '売上'],
    ['商品A', 30],
    ['商品B', 20],
    ['商品C', 50],
]
for row in data:
    ws.append(row)
# グラフを作成
chart = BarChart()
data = Reference(ws, min_col=2, min_row=1, max_col=2, max_row=4)
categories = Reference(ws, min_col=1, min_row=2, max_row=4)
chart.add_data(data, titles_from_data=True)
chart.set_categories(categories)
chart.title = "売上グラフ"
# グラフをシートに追加
ws.add_chart(chart, "E5")
# ファイルを保存
wb.save("sales_chart.xlsx")

pandasを使ったグラフの作成

pandasmatplotlibを使ってグラフを作成し、それをエクセルファイルに保存する方法を紹介します。

import pandas as pd
import matplotlib.pyplot as plt
# データを作成
data = {
    '商品名': ['商品A', '商品B', '商品C'],
    '売上': [30, 20, 50]
}
df = pd.DataFrame(data)
# グラフを作成
plt.figure(figsize=(8, 6))
plt.bar(df['商品名'], df['売上'])
plt.title('売上グラフ')
plt.xlabel('商品名')
plt.ylabel('売上')
plt.savefig('sales_chart.png')
# エクセルファイルにグラフを追加
with pd.ExcelWriter('sales_report.xlsx', engine='xlsxwriter') as writer:
    df.to_excel(writer, sheet_name='売上データ', index=False)
    worksheet = writer.sheets['売上データ']
    worksheet.insert_image('E5', 'sales_chart.png')

これで、Pythonを使ってエクセルの操作を自動化する具体的なシナリオを紹介しました。

これらの方法を活用して、日々の業務を効率化しましょう。

トラブルシューティング

Pythonでエクセルを操作する際には、いくつかのトラブルが発生することがあります。

ここでは、よくあるエラーとその対処法、そしてデバッグの方法について解説します。

よくあるエラーとその対処法

ファイル読み込みエラー

エクセルファイルを読み込む際に発生するエラーの一つに、ファイルが見つからないエラーがあります。

これは、指定したファイルパスが正しくない場合に発生します。

import openpyxl
try:
    workbook = openpyxl.load_workbook('non_existent_file.xlsx')
except FileNotFoundError:
    print("ファイルが見つかりません。ファイルパスを確認してください。")

このエラーを防ぐためには、ファイルパスが正しいことを確認するか、ファイルが存在するかどうかを事前にチェックする方法があります。

import os
file_path = 'non_existent_file.xlsx'
if os.path.exists(file_path):
    workbook = openpyxl.load_workbook(file_path)
else:
    print("ファイルが見つかりません。ファイルパスを確認してください。")

書き込みエラー

エクセルファイルに書き込む際に発生するエラーの一つに、ファイルが開かれているために書き込みができないエラーがあります。

このエラーは、ファイルが他のプログラム(例えばExcel)で開かれている場合に発生します。

import openpyxl
try:
    workbook = openpyxl.Workbook()
    workbook.save('example.xlsx')
except PermissionError:
    print("ファイルが開かれているため、書き込みができません。ファイルを閉じてから再試行してください。")

このエラーを防ぐためには、ファイルが他のプログラムで開かれていないことを確認する必要があります。

デバッグの方法

エラーメッセージの読み方

エラーメッセージは、問題の原因を特定するための重要な手がかりです。

エラーメッセージには、エラーの種類、発生場所、詳細な情報が含まれています。

以下は、典型的なエラーメッセージの例です。

Traceback (most recent call last):
  File "example.py", line 10, in <module>
    workbook = openpyxl.load_workbook('non_existent_file.xlsx')
  FileNotFoundError: [Errno 2] No such file or directory: 'non_existent_file.xlsx'

このエラーメッセージから、エラーが example.py の10行目で発生し、原因は指定したファイルが存在しないことがわかります。

デバッグツールの活用

デバッグツールを活用することで、コードの問題を効率的に特定し、修正することができます。

Pythonには、標準ライブラリとして pdb というデバッガが用意されています。

以下は、 pdb を使ったデバッグの例です。

import pdb
def faulty_function():
    x = 10
    y = 0
    pdb.set_trace()  # デバッガを起動
    result = x / y
    return result
faulty_function()

このコードを実行すると、 pdb が起動し、インタラクティブなデバッグセッションが開始されます。

ここで、変数の値を確認したり、ステップ実行を行ったりすることができます。

また、IDE(統合開発環境)には、より高度なデバッグ機能が組み込まれていることが多いです。

例えば、PyCharmやVisual Studio CodeなどのIDEを使用すると、ブレークポイントの設定や変数の監視など、便利なデバッグ機能を利用できます。

以上が、Pythonでエクセルを操作する際のトラブルシューティングの基本的な方法です。

これらの方法を活用して、効率的に問題を解決しましょう。

目次から探す