- シートコピーは「既存のシートをテンプレートとして複製し、同じ構造のシートを量産する」ための超重要テクニック
- openpyxlでシートをコピーする基本(最も実務向け)
- コピーしたシートの名前を動的に変更する(自動化の要)
- 複数のシートをまとめてコピーする(大量生成に便利)
- コピーしたシートを特定の位置に挿入する(順番を制御)
- コピーしたシートに値を書き込む(テンプレート活用の本番)
- 例題①:月次レポートのテンプレートをコピーして新しい月のシートを作る
- 例題②:担当者ごとの入力フォームをテンプレートから複製する
- 例題③:コピーしたシートにデータを書き込んでレポートを完成させる
- pathlib を使った読みやすいシートコピーコード
- シートコピーを業務で設計するときの視点
シートコピーは「既存のシートをテンプレートとして複製し、同じ構造のシートを量産する」ための超重要テクニック
Excel業務自動化では、同じレイアウトのシートを複数作りたいという場面が非常に多いです。
例えば次のようなケースです。
- 月次レポートで「2024-03」シートを前月のシートからコピーしたい
- 店舗ごとのシートをテンプレートから複製したい
- 入力フォームを複数人分作りたい
- 同じ書式・計算式を持つシートを大量生成したい
Pythonでは openpyxl を使うことで、Excelのシートを丸ごとコピーできます。
初心者でも理解しやすいように、基本から実務テンプレートまで丁寧に解説します。
openpyxlでシートをコピーする基本(最も実務向け)
シートを丸ごとコピーする最小コード
from openpyxl import load_workbook
wb = load_workbook("sample.xlsx")
source = wb["テンプレート"]
new_sheet = wb.copy_worksheet(source)
new_sheet.title = "コピーシート"
wb.save("sample.xlsx")
Python深掘りポイント
copy_worksheet()がシートコピーの中心- 書式・罫線・計算式もそのままコピーされる
- コピー後は
titleで名前を変更する必要がある - テンプレートシートを複製する業務で最も使われる
コピーしたシートの名前を動的に変更する(自動化の要)
日付や番号を使ってシート名を自動生成
from datetime import datetime
from openpyxl import load_workbook
wb = load_workbook("report.xlsx")
source = wb["テンプレート"]
month_name = datetime.now().strftime("%Y-%m")
new_sheet = wb.copy_worksheet(source)
new_sheet.title = month_name
wb.save("report.xlsx")
Python深掘りポイント
- 月次レポートの自動化で最もよく使う
- シート名を日付で自動生成すると毎月の作業がゼロになる
- テンプレートを複製 → 名前変更 の流れが鉄板
複数のシートをまとめてコピーする(大量生成に便利)
店舗ごとにテンプレートをコピーする
from openpyxl import load_workbook
wb = load_workbook("stores.xlsx")
template = wb["テンプレート"]
stores = ["東京店", "大阪店", "名古屋店"]
for name in stores:
ws = wb.copy_worksheet(template)
ws.title = name
wb.save("stores.xlsx")
Python深掘りポイント
- 店舗・部署・担当者ごとにシートを作る業務で大活躍
- テンプレートを1つ作っておけば、何十シートでも自動生成できる
- 書式・計算式が統一されるためミスが減る
コピーしたシートを特定の位置に挿入する(順番を制御)
先頭にコピーシートを追加する
wb = load_workbook("sample.xlsx")
source = wb["テンプレート"]
new_sheet = wb.copy_worksheet(source)
new_sheet.title = "先頭シート"
wb._sheets.insert(0, new_sheet)
wb.save("sample.xlsx")
Python深掘りポイント
- openpyxlはシート順序を操作できる
- レポートの構造を整えるときに便利
_sheetsは内部構造だが実務ではよく使われる
コピーしたシートに値を書き込む(テンプレート活用の本番)
コピー後に必要な値を埋め込む
wb = load_workbook("report.xlsx")
template = wb["テンプレート"]
ws = wb.copy_worksheet(template)
ws.title = "2024-03"
ws["B2"] = "2024年3月"
ws["B3"] = 123456 # 売上合計など
wb.save("report.xlsx")
Python深掘りポイント
- コピー → 値埋め込み の流れはレポート自動生成の基本
- テンプレートに計算式を入れておけば、値を入れるだけで完成する
例題①:月次レポートのテンプレートをコピーして新しい月のシートを作る
シナリオ
「テンプレート」シートをコピーして「2024-03」シートを作りたい。
from openpyxl import load_workbook
from datetime import datetime
wb = load_workbook("monthly.xlsx")
template = wb["テンプレート"]
month_name = datetime.now().strftime("%Y-%m")
ws = wb.copy_worksheet(template)
ws.title = month_name
wb.save("monthly.xlsx")
Python深掘りポイント
- 毎月のレポート作成が完全自動化できる
- テンプレートを1つ作っておけば何年でも使える
例題②:担当者ごとの入力フォームをテンプレートから複製する
シナリオ
担当者リストからシートを自動生成したい。
from openpyxl import load_workbook
wb = load_workbook("form.xlsx")
template = wb["テンプレート"]
members = ["佐藤", "鈴木", "田中"]
for m in members:
ws = wb.copy_worksheet(template)
ws.title = m
wb.save("form.xlsx")
Python深掘りポイント
- 入力フォームを大量に作る業務で大活躍
- 書式・計算式が統一されるため品質が安定する
例題③:コピーしたシートにデータを書き込んでレポートを完成させる
シナリオ
テンプレートをコピー → 売上データを埋め込む。
from openpyxl import load_workbook
wb = load_workbook("report.xlsx")
template = wb["テンプレート"]
ws = wb.copy_worksheet(template)
ws.title = "東京店"
ws["B2"] = "東京店"
ws["B3"] = 250000 # 売上合計
wb.save("report.xlsx")
Python深掘りポイント
- コピーしたシートに値を入れるだけでレポートが完成
- テンプレートに計算式を入れておけば自動計算される
pathlib を使った読みやすいシートコピーコード
Pathオブジェクトで直感的に書ける
from pathlib import Path
from openpyxl import load_workbook
path = Path("sample.xlsx")
wb = load_workbook(path)
ws = wb.copy_worksheet(wb["テンプレート"])
ws.title = "コピー"
wb.save(path)
Pythonメリット
- パス結合が
/で直感的 - 大規模プロジェクトでも保守性が高い
シートコピーを業務で設計するときの視点
- テンプレートシートを作っておくと自動化が圧倒的に楽になる
- コピー後は必ずシート名を変更する
- 店舗・部署・月次など、動的なシート名生成が鍵
- コピー → 値埋め込み → 保存 の流れがレポート自動化の基本
- pandas ではシートコピーはできないため openpyxl が必須
