Python 業務自動化 | Excel業務自動化:Excel基本操作 - 行追加

Python Python
スポンサーリンク

行追加は「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() は途中に行を挿入したいときに便利
  • 大量データはリストのリストで一括追加
  • テンプレートに明細行を流し込むとレポート自動化が一気に進む

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