Python 業務自動化 | Excel業務自動化:Excel基本操作 - シートコピー

Python Python
スポンサーリンク

シートコピーは「既存のシートをテンプレートとして複製し、同じ構造のシートを量産する」ための超重要テクニック

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 が必須

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