社内稟議や経費精算など、繰り返し利用する Excel 申請書は「部署・申請者名・申請日」を入力し直し、明細欄を空に戻す作業が毎回発生します。Python と openpyxl を使えば、この初期化作業を数秒で自動化できます。本稿では、テンプレートを一発で初期状態へ戻すスクリプトをご紹介いたします。
目次
サンプルファイル
| ファイル名 | 用途 | 
|---|
application_form.xlsx | 入力前のテンプレート | 
application_form_reset.xlsx | スクリプト実行後に上書き保存される初期化済みファイル | 
 
スクリプト全体
from datetime import date
from openpyxl import load_workbook
# --- 1. ワークブック読み込み ---
wb_path = 'application_form.xlsx'
wb = load_workbook(wb_path)
ws = wb.active
# --- 2. 固定ヘッダー(部署・氏名・申請日)を設定 ---
ws['B3'].value = 'Sales Div. Section 2'   # 部署セル
ws['B4'].value = 'Rintaro Mori'           # 氏名セル
ws['B5'].value = date.today()             # 申請日セル
# --- 3. 明細行をクリア ---
#    対象範囲:12 行目〜シート最終行、列 C〜H
for row in ws.iter_rows(min_row=12,
                        max_row=ws.max_row,
                        min_col=3,
                        max_col=8):
    # 商品名・数量・金額を初期化
    row[0].value = None   # 商品名 (列 C)
    row[2].value = None   # 数量   (列 E)
    row[3].value = None   # 金額   (列 F)
# --- 4. ブック保存 ---
wb.save('application_form_reset.xlsx')
コード解説
| ステップ | 説明 | 
|---|
| 1. ワークブック読み込み | load_workbook() でテンプレートを開きます。 | 
| 2. 固定ヘッダーの更新 | 部署セル(B3)、氏名セル(B4)、日付セル(B5)のみ書き換えます。 | 
| 3. 明細行のクリア | iter_rows() を使い、12 行目以降の必要列だけ None を代入して空セル化します。 | 
| 4. ブック保存 | 誤上書きを防ぐため、別名で保存しています。 | 
 
応用ポイント
| 要件 | 実装ヒント | 
|---|
| 明細列が増減する場合 | max_col を変数化し、設定ファイルから読み込む構成にすると柔軟です。 | 
| 旧データをバックアップしたい | wb.save('backup_' + wb_path) で実行前にコピーを作成しておくと安全です。 | 
| 日付を和暦で表示したい | ws['B5'].number_format = 'ggge年m月d日' を追加してください。 | 
 
まとめ
- 部署・氏名・日付のセット と 明細行のクリア を一括実行することで、申請書テンプレートを数秒で初期状態へ戻せます。
 
iter_rows() の範囲指定と None 代入だけでセル内容を削除できるため、複雑なループは不要です。 
- 手作業に比べヒューマンエラーを大幅に削減でき、定型業務の効率化に直結します。