概要
作業者から管理者へ作業者からの早めのエスカレーションを基本として、
毎週の自動アラートで漏れを防ぐ二重の仕組みにする。
作業者のルール
- 工数不足の兆候がある時点で、管理者にエスカレーションする
- 期限:毎週月曜 9:00 のアラートより前(目安は前週金曜まで)
- 「足りない気がする」段階で連絡してOK。迷ったら連絡する。
週次アラート(漏れ防止)
- 毎週月曜 9:00 に、予定ペースを下回っていれば管理者と作業者へメール通知(CC:上位マネジメント)
- 作業者からのエスカレーションの有無に関係なく、必ず判定する
管理者の対応
事前エスカレーションで工数不足を認識した場合
- 作業の調整や上位への報告を判断する
- 月曜のアラートは確認済として対応なし
週次アラートで工数不足を認識した場合
- 当日中に作業者へヒアリングし、今後の見込みを確認する
- 状況に応じて、上位へエスカレーションするか判断する
- アラートメールに全員返信し、ヒアリング結果と対応(上位へのエスカレーション有無)をメモとして残す
週次アラート設計(Power Automate → メール)
毎週月曜 9:00 に、当月の実績ファイルから合計実績工数を読み取り、予定ペースを下回っていれば メールで通知する。
| 項目 | 設定 |
| 月間予定工数 | xxx h |
| 実行タイミング | 毎週月曜 9:00 |
| 実績の取得元 | OneDrive の当月ファイルの合計実績セル(ファイルは月ごとに別) |
| 通知先 | メール(宛先:管理者、作業者CC:上位マネジメント) |
| アラート条件 | 進捗率が 100% 未満 |
計算方法
- 期待消化工数 = xxx h × 前週末までの経過平日数 ÷ 当月の平日数
- 進捗率 = 実績合計 ÷ 期待消化工数
- 進捗率が 100% 未満 → Teams にアラート(実績・期待値・不足時間を記載)
フローの構成
- トリガー:繰り返し(毎週月曜 9:00)
- 当月のフォルダ(「10月」「11月」のような月名フォルダ)を実行日の月から特定し、フォルダ内の全員分のファイルから、ファイル名に対象作業者の名前を含むものだけを絞り込んで取得(フィルター条件:ファイル名に作業者名を含む)
- Excel Online(Business)でファイルを開き、合計実績セルを取得(セル位置は毎月同じ。客先提出ファイルを編集せずに読むため、Office スクリプトで固定セルの値を返し、フローの「スクリプトの実行」で呼び出す)
- 当月の平日数と経過平日数を計算(祝日は別リストで除外)
- 条件分岐:進捗率 < 100% なら Teams にメッセージ投稿
週次アラート詳細設計
1. Office スクリプトを作る
実績ファイルを1つ開き、「自動化」タブ →「新しいスクリプト」で以下を貼り付け、「GetActual」という名前で保存する。
function main(workbook: ExcelScript.Workbook): number {
// 合計実績セル(仮で A1。実際の番地に差し替える)
const sheet = workbook.getActiveWorksheet();
const value = sheet.getRange("A1").getValue();
return Number(value);
}
シートが複数ある場合は、getActiveWorksheet() を getWorksheet("シート名") に変える。
2. フローを作る(Power Automate)
- 「スケジュール済みクラウドフロー」を新規作成。毎週・月曜・9:00、タイムゾーンは東京。
- 変数を作成:月間予定工数 = xxx、作業者名 = 対象者の名前。
- 「作成」アクションで当月フォルダ名を作る:式
concat(int(formatDateTime(convertFromUtc(utcNow(),'Tokyo Standard Time'),'MM')),'月')→「10月」など。 - OneDrive for Business「フォルダー内のファイルの一覧」で、親フォルダ/当月フォルダ を指定。
- 「アレイのフィルター処理」で、名前に作業者名を含むファイルだけ残す。
- Excel Online (Business)「スクリプトの実行」で、5 の先頭ファイルに GetActual を実行 → 実績合計を取得。
- 平日数を計算:当月の平日数と、前週末(日曜)までの経過平日数を求める。最初は「Do until」で1日ずつ数える方法が簡単。日本の祝日はすべて休みとして除外する(その年の祝日一覧を配列変数に入れておく)。
- 期待消化工数 = xxx × 経過平日数 ÷ 当月平日数、進捗率 = 実績合計 ÷ 期待消化工数。
- 「条件」:進捗率 < 1 なら Office 365 Outlook「メールの送信 (V2)」でアラート送信(宛先:管理者・作業者、CC:上位マネジメント)。
補足:平日数の計算(日本の祝日を除外)
- 「作成」アクション(名前:祝日リスト)に、その年の祝日を配列で入れる。例:
["2026-11-03","2026-11-23","2027-01-01"]。祝日は内閣府の「国民の祝日」一覧から写す。 - 変数を用意:日付カウンタ = 当月1日、当月平日数 = 0、経過平日数 = 0。前週日曜 =
formatDateTime(addDays(convertFromUtc(utcNow(),'Tokyo Standard Time'),-1),'yyyy-MM-dd')(月曜実行のため前日が日曜)。 - 「Do until」で日付カウンタが翌月1日になるまで繰り返す。
- ループ内の「条件」:
dayOfWeek(日付カウンタ)が 0(日)でも 6(土)でもなく、かつcontains(outputs('祝日リスト'), 日付カウンタ)が false なら平日。 - 平日なら 当月平日数 を +1。さらに日付カウンタ ≤ 前週日曜 なら 経過平日数 も +1。
- 日付カウンタを
formatDateTime(addDays(日付カウンタ,1),'yyyy-MM-dd')で翌日に進める。
運用:作成時は 2026 年と 2027 年の祝日をまとめて入れておく(年をまたいでも止まらない)。以降は年末に翌年分を追加する。祝日を返す外部 API を使えば自動化できるが、HTTP コネクタは有料プランが必要なことが多い。
3. メール通知の文面例
件名:【工数アラート】{作業者名} さん {月} 実績 {実績合計} h / 期待値 {期待消化工数} h(進捗率 {進捗率}%) 不足 {期待消化工数 − 実績合計} h。状況確認をお願いします。
4. テストのしかた
- 手動で「テスト」実行し、各アクションの出力を確認。
- 実績セルの値を一時的に小さくしたコピーで、アラートが飛ぶか確認。
- 月初の第1月曜(経過平日数が0)は割り算エラーになるため、経過平日数 = 0 のときは処理を終了する条件を入れる。