Day 31:Excel操作入門で「業務自動化の入口」に立つ
Day 31では、いよいよ Excel操作による業務自動化 に入っていきます。 キーワードは次の4つです。
openpyxlWorkbookWorksheetCell
Excelは多くの現場で使われているため、PythonでExcelを扱えるようになると、 「手作業でやっていたことを自動化する」チャンスが一気に広がります。
ここでは、初心者向けにかみ砕いて、 「Excelファイルを作る → シートを扱う → セルを読む・書く」 という流れをステップバイステップで説明していきます。
Excel操作の基本:openpyxlとは何か
openpyxlは「Excelを触るための道具」
PythonでExcel(.xlsx)を扱うときによく使われるライブラリが openpyxl です。 これを使うと、次のようなことができます。
- 新しいExcelファイルを作成する
- 既存のExcelファイルを読み込む
- シート(Worksheet)を追加・削除する
- セル(Cell)に値を書き込む・読み取る
- 罫線や色などの簡単な装飾を行う
まずは「インストール」と「最初の一歩」から始めます。
openpyxlのインストール
ターミナル(またはコマンドプロンプト)で次のコマンドを実行します。
bash
pip install openpyxl
これで、Pythonから import openpyxl ができるようになります。
Workbook:Excelファイルそのものを表す
Workbookのイメージ
Workbook は、Excelファイル全体を表すオブジェクトです。 Excelを開いたときに見える「ブック」がそのまま Workbook だと考えてください。
新しいExcelファイルを作るときは、Workbook を作成します。
新しいWorkbookを作成して保存する
from openpyxl import Workbook
def create_empty_workbook():
"""空のExcelファイルを作成して保存する例です。"""
wb = Workbook() # 新しいWorkbook(ブック)を作成します。
# デフォルトで1つのシートが作られています(通常は 'Sheet' という名前)。
# ここでは特に変更せず、そのまま保存します。
wb.save("example.xlsx") # Excelファイルとして保存します。
print("example.xlsx を作成しました。")
if __name__ == "__main__":
create_empty_workbook()
Pythonここでのポイントは、
Workbook()で「新しいExcelファイル」を作っていることwb.save("ファイル名")で実際の.xlsxファイルとして保存していること
です。
Worksheet:シートを扱う
Worksheetのイメージ
Worksheet は、Excelのシート(タブ)を表すオブジェクトです。 1つの Workbook の中に、複数の Worksheet を持つことができます。
アクティブなシートを取得する
Workbook を作成すると、最初から1つのシートが存在します。 それを「アクティブなシート」として取得できます。
from openpyxl import Workbook
def use_active_sheet():
"""アクティブなシートを取得して使う例です。"""
wb = Workbook()
ws = wb.active # 現在アクティブなシートを取得します。
print("シート名:", ws.title) # デフォルトでは 'Sheet' という名前です。
wb.save("active_sheet_example.xlsx")
print("active_sheet_example.xlsx を作成しました。")
if __name__ == "__main__":
use_active_sheet()
Pythonシートを追加する・名前を付ける
複数のシートを持つExcelファイルを作ることもできます。
from openpyxl import Workbook
def create_multiple_sheets():
"""複数のシートを作成する例です。"""
wb = Workbook()
# 既存のアクティブシートに名前を付けます。
ws1 = wb.active
ws1.title = "Summary" # サマリー用シート
# 新しいシートを追加します。
ws2 = wb.create_sheet(title="Data") # データ用シート
ws3 = wb.create_sheet(title="Report") # レポート用シート
wb.save("multi_sheet_example.xlsx")
print("multi_sheet_example.xlsx を作成しました。")
if __name__ == "__main__":
create_multiple_sheets()
Pythonここでのポイントは、
wb.activeで「最初のシート」を取得していることws.titleでシート名を変更できることwb.create_sheet(title="...")で新しいシートを追加できること
です。
Cell:セルに値を書き込む・読み取る
Cellのイメージ
Cell は、Excelの1マスを表すオブジェクトです。 たとえば「A1」「B2」といった位置に対応します。
Worksheet を通して、セルにアクセスします。
セルに値を書き込む基本
from openpyxl import Workbook
def write_cells():
"""セルに値を書き込む基本例です。"""
wb = Workbook()
ws = wb.active
ws.title = "Sample"
# A1セルに文字列を書き込みます。
ws["A1"] = "名前"
# B1セルに文字列を書き込みます。
ws["B1"] = "年齢"
# A2セル・B2セルにデータを書き込みます。
ws["A2"] = "Alice"
ws["B2"] = 30 # 数値もそのまま書き込めます。
wb.save("write_cells_example.xlsx")
print("write_cells_example.xlsx を作成しました。")
if __name__ == "__main__":
write_cells()
Pythonここでのポイントは、
ws["A1"] = ...のように、セル番地でアクセスできること- 文字列・数値などをそのまま代入すれば、セルに書き込まれること
です。
cell() メソッドで行・列を指定する
セル番地ではなく、「行番号・列番号」で指定する方法もあります。
from openpyxl import Workbook
def write_cells_with_coordinates():
"""行番号・列番号でセルに書き込む例です。"""
wb = Workbook()
ws = wb.active
ws.title = "Sample"
# 1行1列(A1)に書き込みます。
ws.cell(row=1, column=1, value="商品名")
# 1行2列(B1)に書き込みます。
ws.cell(row=1, column=2, value="価格")
# 2行目にデータを書き込みます。
ws.cell(row=2, column=1, value="りんご")
ws.cell(row=2, column=2, value=120)
wb.save("write_cells_coordinates_example.xlsx")
print("write_cells_coordinates_example.xlsx を作成しました。")
if __name__ == "__main__":
write_cells_with_coordinates()
Pythonここでのポイントは、
ws.cell(row=行番号, column=列番号, value=値)という形式でセルにアクセスできること- 行・列をループで回すときに便利な書き方であること
です。
既存のExcelファイルを読み込んでセルを読む
Workbookを読み込む
新規作成だけでなく、既存のExcelファイルを読み込んで操作することもできます。
from openpyxl import load_workbook
def read_existing_workbook():
"""既存のExcelファイルを読み込んでセルを読む例です。"""
wb = load_workbook("write_cells_example.xlsx") # 先ほど作ったファイルを読み込みます。
ws = wb["Sample"] # シート名で取得します。
# A1セルとB1セルを読み取ります。
header1 = ws["A1"].value
header2 = ws["B1"].value
print("ヘッダー:", header1, header2)
# A2セルとB2セルを読み取ります。
name = ws["A2"].value
age = ws["B2"].value
print("データ:", name, age)
if __name__ == "__main__":
read_existing_workbook()
Pythonここでのポイントは、
load_workbook("ファイル名")で既存のExcelファイルを読み込んでいることwb["シート名"]で特定のシートを取得していることws["A1"].valueのように.valueでセルの値を取り出していること
です。
行・列をループで処理する:業務自動化の入口
行を順番に読み取る
Excelの業務自動化では、「表形式のデータをまとめて処理する」ことが多いです。 そのため、行・列をループで回す方法を押さえておくと便利です。
from openpyxl import load_workbook
def iterate_rows():
"""行を順番に読み取る例です。"""
wb = load_workbook("write_cells_coordinates_example.xlsx")
ws = wb["Sample"]
# 1行目はヘッダーなので、2行目以降を読み取るイメージです。
for row in ws.iter_rows(min_row=2, values_only=True):
# row はタプル(例: ("りんご", 120))として渡されます。
product_name, price = row
print(f"商品: {product_name}, 価格: {price}")
if __name__ == "__main__":
iterate_rows()
Pythonここでのポイントは、
ws.iter_rows(min_row=2, values_only=True)で「2行目以降の行」をまとめて取得していることvalues_only=Trueにすると、Cellオブジェクトではなく「値だけ」が渡されること- 行ごとに処理することで、「一覧データをまとめて処理する」形に近づいていること
です。
Day 31ミニテンプレート:Excel操作入門スクリプト
最後に、Day 31で学んだ内容をまとめて試せる「Excel操作入門スクリプト」のテンプレートを示します。
# day31_excel_intro.py
# Excel操作入門の練習用スクリプト
from openpyxl import Workbook, load_workbook
def create_sample_workbook():
"""サンプルExcelファイルを作成する関数です。"""
wb = Workbook()
ws = wb.active
ws.title = "Employees"
# ヘッダー行
ws["A1"] = "名前"
ws["B1"] = "部署"
ws["C1"] = "年齢"
# データ行
ws["A2"] = "Alice"
ws["B2"] = "Sales"
ws["C2"] = 30
ws["A3"] = "Bob"
ws["B3"] = "Engineering"
ws["C3"] = 28
wb.save("employees.xlsx")
print("employees.xlsx を作成しました。")
def read_sample_workbook():
"""サンプルExcelファイルを読み込んで内容を表示する関数です。"""
wb = load_workbook("employees.xlsx")
ws = wb["Employees"]
print("=== 従業員一覧 ===")
for row in ws.iter_rows(min_row=2, values_only=True):
name, department, age = row
print(f"名前: {name}, 部署: {department}, 年齢: {age}")
def main():
create_sample_workbook()
read_sample_workbook()
if __name__ == "__main__":
main()
Pythonこのスクリプトを実行すると、
employees.xlsxが作成され- その内容を読み込んで、ターミナルに一覧表示する
という一連の流れを体験できます。
Day 31のまとめ
Day 31では、Excel操作入門として、
openpyxlを使ってExcelファイル(Workbook)を作成・読み込みする方法- シート(Worksheet)を取得・追加し、名前を付ける基本
- セル(Cell)に値を書き込む・読み取る方法
- 行をループで処理して、「表形式データをまとめて扱う」入口となる書き方
をステップバイステップで学んでいただきました。
ここまで来ると、「Excelを手でいじる」だけでなく、 「PythonでExcelを操作して業務を自動化する」 という発想に一歩近づいています。 次のDayでは、このExcel操作をさらに発展させて、 実際の業務で使えるレベルの自動化に踏み込んでいきます。

