行追加は「Excelの表に新しいデータ行を自動で追加し、ログ・明細・履歴を蓄積する」ための超重要テクニック
Excel業務自動化では、行を追加する処理が非常に多く登場します。
例えば次のような場面です。
- 日次処理の結果をログとして1行ずつ追加したい
- 売上データを毎日追記したい
- 入力フォームに新しい行を追加したい
- コピーしたテンプレートに明細行を流し込みたい
Pythonでは openpyxl を使うことで、Excelに行を簡単に追加できます。
初心者でも理解しやすいように、基本から実務テンプレートまで丁寧に解説します。
openpyxlで行を追加する基本(最も実務向け)
append() を使って1行追加する(最も簡単)
from openpyxl import load_workbook
wb = load_workbook("sample.xlsx")
ws = wb["Sheet1"]
ws.append(["商品A", 10, 1000])
wb.save("sample.xlsx")
Python深掘りポイント
append()は「1行丸ごと追加」するためのメソッド- リスト形式で渡すだけで自動的に次の空行に追加される
- 表形式のデータを扱うときに最も便利
- pandas を使わずに Excel だけで完結したい場合に最適
最終行を取得して、その下に追加する(ログ・履歴に最適)
max_row を使って次の行番号を計算
from openpyxl import load_workbook
wb = load_workbook("log.xlsx")
ws = wb.active
next_row = ws.max_row + 1
ws.cell(row=next_row, column=1, value="2024-03-01")
ws.cell(row=next_row, column=2, value="処理完了")
ws.cell(row=next_row, column=3, value="OK")
wb.save("log.xlsx")
Python深掘りポイント
ws.max_rowは「現在の最終行」を返す- ログや履歴のように「下に追記する」処理で必須
- append() より柔軟に列を指定できる
特定の位置に行を挿入する(途中に行を追加したい場合)
insert_rows() を使う
from openpyxl import load_workbook
wb = load_workbook("sample.xlsx")
ws = wb["Sheet1"]
ws.insert_rows(3) # 3行目に空行を挿入
ws["A3"] = "挿入された行"
wb.save("sample.xlsx")
Python深掘りポイント
insert_rows(3)は「3行目に新しい行を挿入」- 既存のデータは下にずれる
- 表の途中に行を追加したいときに便利
複数行をまとめて追加する(大量データの投入に便利)
append() をループで使う
rows = [
["商品A", 10, 1000],
["商品B", 20, 2000],
["商品C", 30, 3000]
]
for r in rows:
ws.append(r)
wb.save("sample.xlsx")
Python深掘りポイント
- リストのリストを使えば大量データを一気に追加できる
- CSV → Excel の変換などでよく使う
例題①:売上データを毎日1行ずつ追記する
シナリオ
売上データを「売上履歴」シートに追加したい。
from openpyxl import load_workbook
wb = load_workbook("sales.xlsx")
ws = wb["履歴"]
ws.append(["2024-03-01", "商品A", 10, 1000])
wb.save("sales.xlsx")
Python深掘りポイント
- append() は「履歴を積み上げる」業務に最適
- 日次・週次の自動処理でよく使う
例題②:テンプレートに明細行を流し込む
シナリオ
テンプレートの明細部分に複数行を追加したい。
from openpyxl import load_workbook
wb = load_workbook("template.xlsx")
ws = wb["明細"]
details = [
["A001", "商品A", 10, 1000],
["A002", "商品B", 20, 2000]
]
for d in details:
ws.append(d)
wb.save("report.xlsx")
Python深掘りポイント
- テンプレートにデータを流し込むとレポートが自動生成できる
- append() は明細行の追加に最適
例題③:ログシートに処理結果を追記する
シナリオ
処理結果をログとして残したい。
from openpyxl import load_workbook
from datetime import datetime
wb = load_workbook("log.xlsx")
ws = wb.active
next_row = ws.max_row + 1
ws.cell(row=next_row, column=1, value=datetime.now())
ws.cell(row=next_row, column=2, value="処理完了")
ws.cell(row=next_row, column=3, value="OK")
wb.save("log.xlsx")
Python深掘りポイント
- ログは「最終行の下に追加」が基本
- 日付を入れることで履歴管理がしやすくなる
pathlib を使った読みやすい行追加コード
Pathオブジェクトで直感的に書ける
from pathlib import Path
from openpyxl import load_workbook
path = Path("sample.xlsx")
wb = load_workbook(path)
ws = wb.active
ws.append(["新しい行", 123])
wb.save(path)
Pythonメリット
- パス結合が
/で直感的 - 大規模プロジェクトでも保守性が高い
行追加を業務で設計するときの視点
- append() は「次の空行に追加」する最も簡単な方法
- max_row を使うとログや履歴の追記が安定する
- insert_rows() は途中に行を挿入したいときに便利
- 大量データはリストのリストで一括追加
- テンプレートに明細行を流し込むとレポート自動化が一気に進む

