
シート保護・権限管理の自動化
- Excelシート保護の一括自動設定の完全自動化を実現するPythonスクリプトを5ステップで解説
- 「共有Excelでの数式上書きトラブル」という課題を根本から解消する
- Claude Codeへの自然言語指示だけでスクリプトを生成できる
- 月・週・日単位の定期実行で完全無人化を実現する方法も紹介
以下のステップを順番に実行することで、今日から業務自動化を始められます。コピーして使えるコードと、Claude Codeへの指示文をセットで解説します。
Excelのシート保護・パスワード設定・特定セルのみ編集許可を手動で設定するのは煩雑です。Claude Code + openpyxl で一括自動化します。
ステップ1:全シートにパスワード保護を一括設定
import openpyxl
wb = openpyxl.load_workbook("共有ファイル.xlsx")
PASSWORD = "SecurePass2025"
for ws in wb.worksheets:
for row in ws.iter_rows():
for cell in row:
cell.protection = openpyxl.styles.Protection(locked=True)
for row in ws.iter_rows(min_row=2, min_col=4, max_col=4, max_row=100):
for cell in row:
cell.protection = openpyxl.styles.Protection(locked=False)
ws.protection.sheet = True
ws.protection.password = PASSWORD
ws.protection.enable()
wb.save("共有ファイル_保護済.xlsx")
print(f"{len(wb.worksheets)}シートに保護を設定")
全シートに保護を一括適用。数式・マスターデータを誤編集から完全保護。
ステップ2:入力欄のみ編集可能なフォームを作成
import openpyxl
from openpyxl.styles import PatternFill, Font, Protection
INPUT_BG = PatternFill("solid", fgColor="FFFDE7") # 淡い黄色
LOCK_BG = PatternFill("solid", fgColor="F5F5F5") # グレー
wb = openpyxl.load_workbook("申請フォーム.xlsx")
ws = wb.active
INPUT_RANGES = ["B3","B4","B5","B7","B8","D3","D4","D5"]
for cell_addr in ws.iter_rows(values_only=False):
for cell in cell_addr:
if cell.coordinate in INPUT_RANGES:
cell.fill = INPUT_BG
cell.protection = Protection(locked=False)
else:
cell.fill = LOCK_BG if cell.value else cell.fill
cell.protection = Protection(locked=True)
ws.protection.sheet = True
ws.protection.password = "form2025"
ws.protection.enable()
wb.save("申請フォーム_保護.xlsx")
print("入力専用フォーム作成完了")
入力欄(黄色)のみ編集可能なフォームを自動作成。他のセルはロックされ安全。
ステップ3:マクロを除去した安全ファイルを生成
import shutil, openpyxl
shutil.copy("有マクロファイル.xlsm", "有マクロファイル_work.xlsx")
wb = openpyxl.load_workbook("有マクロファイル_work.xlsx", keep_vba=False)
wb.save("安全ファイル_マクロなし.xlsx")
import os
os.remove("有マクロファイル_work.xlsx")
print("マクロ除去・安全ファイル生成完了")
VBAマクロを除去した安全なxlsxファイルを自動生成。外部共有前の安全処理が自動化。
ステップ4:アクセスログを自動記録
import openpyxl, getpass
from datetime import datetime
LOG_FILE = "access_log.xlsx"
try:
wb_log = openpyxl.load_workbook(LOG_FILE)
ws_log = wb_log.active
except FileNotFoundError:
wb_log = openpyxl.Workbook()
ws_log = wb_log.active
ws_log.append(["日時","ユーザー","ファイル","操作"])
ws_log.append([
datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
getpass.getuser(),
"共有ファイル.xlsx",
"アクセス"
])
wb_log.save(LOG_FILE)
print("アクセスログ記録完了")
ファイルアクセスを自動ログ記録。監査証跡の確保が自動化。
ステップ5:保護解除・一括編集→再保護のワークフロー
import openpyxl
def unlock_and_update(filepath, password, updates):
wb = openpyxl.load_workbook(filepath)
for ws in wb.worksheets:
ws.protection.sheet = False
for cell_addr, value in updates.items():
wb.active[cell_addr] = value
for ws in wb.worksheets:
ws.protection.sheet = True
ws.protection.password = password
ws.protection.enable()
wb.save(filepath)
print(f"更新+再保護完了: {len(updates)}セル")
unlock_and_update("共有ファイル_保護済.xlsx", "SecurePass2025",
{"B1": "2025年度版", "C1": "最終更新: 2025-10-01"})
保護解除→更新→再保護をワンコマンドで実行。管理者作業が効率化。
このシステムが解決する課題
セル・シート保護の一括設定と解除を自動化。この自動化が特に効果的な場面と、解決できる課題を整理します。
- 共有Excelで誰かが数式を誤って上書きするトラブルが繰り返し発生している
- 保護設定・解除のたびにシートを手動で操作する手間がかかっている
- 複数シートに同じ保護設定をするのが面倒で、設定漏れが発生している
- どのセルが入力可能でどのセルが保護されているかの管理が煩雑になっている
実務での活用シナリオ
導入前後の効果比較
複数シートの保護設定を手動で行うため、設定漏れや設定ミスが多発。「なぜかセルが編集できない」「数式が上書きされていた」などのトラブル対応に時間を取られていた。
Pythonスクリプトが全シートに一括で保護設定を適用。保護する範囲・許可する操作・パスワードをコードで管理するため、設定漏れゼロ。複数ファイルへの一括適用も数秒で完了。
導入のポイントと注意事項
- 保護パスワードは環境変数や別ファイルで管理し、スクリプトに直書きしない(情報漏洩リスクを低減)
- worksheet.protection.enable()の後にworksheet.protection.allow_insert_rows = Trueなどで部分許可が設定できる
- 保護設定と同時に、設定内容を「保護設定ログ.txt」として出力すると後から確認が容易になる
- 定期的な一括再保護(月次・四半期)をタスクスケジューラで自動実行すると管理の漏れがなくなる
よくある質問(FAQ)
まとめ
✅ 全シートへの一括保護・パスワード設定を自動化
✅ 入力欄のみ編集可能なフォームを自動作成
✅ アクセスログ・マクロ除去で安全管理を徹底
どんな現場で使われているか:活用シナリオ
実装で押さえるべき重要ポイント
- 1
パスワードは環境変数で管理:スクリプト内にパスワードをハードコードするのは危険です。os.environ.get(“EXCEL_PASSWORD”)のように環境変数から読み込む実装を徹底してください。
- 2
保護設定は最後に適用する:シート保護を先に適用するとその後のセル操作が制限されます。データ入力・書式設定をすべて完了させてから最後に保護を適用するのが正しい順序です。
- 3
編集権限のある入力セルを明確にマーク:黄色背景などで「ここは入力可能」とユーザーにわかるようにすることで、保護エラーへの問い合わせを減らせます。
ビジネスインパクト
この記事のまとめ
- ✅ openpyxlでExcelのシート保護・パスワード設定を自動適用できる
- ✅ 数式・設定シートを非表示にして配布用Excelを自動生成できる
- ✅ 入力エリア以外をロックして誤変更・誤削除を防止できる
- ✅ 複数ファイルへの保護設定一括適用で管理工数を大幅削減できる
よくある質問(FAQ)
関連記事