消防部隊の執務表(通信指令 / 受付 の一次指定者)を自動生成するExcel + VBAツール。 ポジション×時間帯のルールはすべてシートで管理、VBAにハードコードなし。 署所ごとの違いもシート編集だけで対応可能。
| ファイル | 役割 |
|---|---|
執務表自動化.xlsx |
Excel本体(7シート構成) |
ShiftScheduler.bas |
VBAマクロ(VBAコードシートにも埋込) |
build_template.py |
テンプレート再生成スクリプト |
sim_scheduler.py |
Python動作検証シミュレータ |
- 執務表 — 印刷用、一次指定者が自動で埋まる
- 当日チェック — 毎当番の入力(日付 + 氏名ごとのポジション + 追加除外時間帯)
- ポジション定義 — 🔑 ポジション × 時間帯 のブロックマトリクス(自由編集)
- 名簿 — 氏名のみ(30名バッファ)
- 履歴 — 過去当番を自動累積
- 使い方 — 操作手順
- VBAコード — 貼付用ソースコード
執務表自動化.xlsxを開く- 名前を付けて保存 →
.xlsm(マクロ有効ブック) Alt+F11→ ThisWorkbook 右クリック → 挿入 → 標準モジュール- VBAコードシートのA12以下を全選択コピー (
Ctrl+Shift+End→Ctrl+C) - 新規モジュールに貼付 (
Ctrl+V) - 執務表シートにボタン2つ配置
GenerateShift— 本日生成ShowDateFromHistory— 過去日表示
- 当日チェックシートで:
B3当番日を更新- 各隊員の 今日のポジション をドロップダウンから選ぶ
- 半日不在があれば 除外1〜3 の開始/終了時間帯 を入れる
- 執務表シートの「本日を生成」ボタン
- 印刷 or Word様式にコピペ
マトリクス: 行=ポジション名、列=時間帯(25枠)、セルに × を入れるとその時間帯ブロック。
初期登録済みポジション:
- ポンプ隊 / 救助隊 / はしご隊 / 伝令 / 通信担当 / 情報担当 / 情報員 / 署隊長伝令 / 残留 / 署隊本部支援員 / その他 (いずれも初期ブロックなし、自由に割当可)
- 救急隊 (全時間×、基本不参加)
- 当直士長 (18-19, 19-20, 6-7, 7-8 ×)
- 食当 (14-17 ×)
- 休暇 / 研修/出向 (全時間×)
- 「方面訓練」ポジションを新設 → 新規行追加、特定時間帯に × を入れる
- 「食当+当直主任」のような複合ポジション → 新規行、両方の × を入れる
- 署所独自の勤務ルール → 既存ポジションの × を書き換える
業務固有ルールはすべてデータ化。VBAに残るのはスケジューリング補助のみ:
| ルール | 実装場所 |
|---|---|
| ポジション×時間帯ブロック | ポジション定義シート |
| 個人の追加除外時間帯 | 当日チェックシート |
| 通信と受付は同時刻で別人 | VBA (構造) |
| 12勤と17勤は別人 | VBA (後処理) |
| 深夜(22-4時)は一人1回まで | VBA (スコアリング) |
| 夜20時以降は前日同時刻と別人 | VBA (スコアリング) |
| 前日の一つ上にずらす | VBA (スコアリング) |
| 10-17時は一人最低1回勤務 | VBA (スコアリング) |
| 連続割当回避 | VBA (スコアリング) |
- 執務表
B2に yyyy/m/d で日付 →ShowDateFromHistoryボタン
pip install openpyxl
python3 build_template.py # .xlsx 再生成
python3 sim_scheduler.py # ロジック検証