エクセルのシフト表で希望休をチェックするなら、勤務セルを数式に置き換えるのではなく、別シートに照合結果を表示する方法を使いましょう。入力済みの勤務を残したまま、希望休との重複、未入力、未登録の記号を分けて確認します。
必要なのは、既存の月間勤務表、希望休一覧、勤務・休み記号の一覧です。以下では、コピーできる数式と6ケースの期待表示を示します。行うのは判定の自動表示であり、勤務の自動割当や必要人数の自動集計ではありません。
先に「希望休の対象」と「勤務記号」を決める
今回は「その日を終日休みにしたい」という希望を対象にします。「休」と「有休」はどちらも休み記号として扱いますが、休暇の種類や承認状況まで一致しているという判定ではありません。
半日休、時間帯の希望、夜勤が翌日にまたがる場合の休暇の意味は、この式では判断しない前提です。
希望をもとに勤務を新しく割り当てる場合は希望休を反映するExcelシフト表、更新前後の勤務を比べる場合はシフト表の変更箇所を比較する手順を参照してください。
元の勤務表はコピーして残す
作業前のブックを別名で保存し、原本は編集せずに保管します。作業用ブックに「希望」「設定」「チェック」の各シートを追加してください。既存の勤務セルには照合式を入れません。
以下は、2026年10月・スタッフ50人を想定した架空例です。
| シート | 入力位置と内容 |
|---|---|
| 勤務 | A2:A51にスタッフID、B2:B51に氏名 |
| 勤務 | C1:AG1に10月1日〜31日のExcel日付値、C2:AG51に勤務記号 |
| 希望 | A列にID、B列に年月日、C列に状態。1行目は見出し、2行目からデータ |
| 設定 | A2:A20に勤務記号、B2:B20に休み記号 |
設定のA列には「早・遅・日」、B列には「休・有休」を1セルずつ登録します。「早」は早番、「遅」は遅番という運用です。同じ記号を両方のリストに入れないでください。 既存表の位置が異なる場合は、表を作り直すのではなく、後述する式の参照先を実際の列・行へ変更します。
IDと年月日で希望一覧をそろえる
氏名ではなく、スタッフIDと年月日の組み合わせで照合します。両シートのIDは「S001」のような文字列に統一し、空欄や前後のスペースをなくしてください。この式ではIDを半角英数字にそろえ、COUNTIFSの条件文字になる「*」「?」「~」はIDに使いません。
希望シートは「1人・1日につき1行」とし、C列には「有効」「取消」のどちらかを入力します。取消時は該当行の状態を更新し、同じID・日付の古い有効行を残さない運用にします。履歴を残す場合は、照合範囲とは別に保管しましょう。
年月日は年を含めて入力し、時刻を含めません。勤務シートの見出しも、単なる数字の「1」「2」ではなく日付値にそろえます。
照合前に元データの不備を確認する
数式を入れる前に、次の項目を確認してください。勤務表に存在しないスタッフや日付の希望は、後で作る照合表には現れません。警告がないことだけを理由に、希望が反映済みだと判断しないことが大切です。
| 確認項目 | 確認・修正する内容 |
|---|---|
| 勤務側のID | 空欄がなく、1人1行になっているか。同じIDの重複行を整理する |
| 希望側のID | 勤務表に登録されているか。転記ミスや表記違いを直す |
| 希望の重複 | 同じID・年月日の行を重ねない。同じ人でも別日の希望は問題ない |
| 日付 | 文字列や時刻付きの値を除き、2026年10月の日付か確認する |
| 希望の状態 | 「有効」「取消」以外の誤字、空欄、余分なスペースを直す |
| 設定の記号 | 勤務・休みの分類を確定し、両リストの重複をなくす |
IDの確認には、次の補助式を使えます。
- チェック!AH2:
=COUNTIF(勤務!$A$2:$A$51,勤務!A2)を入力し、AH51までコピー。IDの空欄を除いたうえで、2以上なら勤務側の重複を確認します。 - 希望!D2:
=COUNTIF(勤務!$A$2:$A$51,A2)を入力し、希望データの最終行までコピー。0なら未登録ID、2以上なら勤務側の重複が残っています。
COUNTIFは、指定した範囲で条件に合うセルの個数を数える関数です。ここでは、各IDの結果が1になる状態を目指します。(マイクロソフト)
別シートで希望休と勤務を照合する
チェックシートに、勤務表と同じ位置のID・氏名・日付を表示します。
- A1に「スタッフID」、B1に「氏名」を入力する。
- A2に
=勤務!A2、B2に=勤務!B2を入力し、それぞれ51行目までコピーする。 - C1に
=勤務!C1を入力し、AG1まで右へコピーする。 - C1:AG1の表示形式を日付にする。
C2:AG51が判定結果の表示場所です。チェックシートだけを並べ替えず、勤務表と同じ行列順で使ってください。
COUNTIFSで有効な希望を探す
まずチェック!C2に、次の式を入力します。
=COUNTIFS(希望!$A$2:$A$1000,勤務!$A2,希望!$B$2:$B$1000,勤務!C$1,希望!$C$2:$C$1000,"有効")
COUNTIFSは、複数の条件をすべて満たす件数を数えます。この式では「勤務表のその行のID」「その列の年月日」「状態が有効」の3条件を、希望一覧の同じ行で確認しています。(マイクロソフト)
結果が0なら有効な希望なし、1以上なら有効な希望ありです。取消行は数えません。2以上の場合は同じ希望が重複していないか、元データを見直しましょう。
希望一覧が1000行を超える場合は、A・B・C列の参照範囲を同じ行数まで広げます。
IFで重複・未入力・記号確認を分ける
件数を確認できたら、チェック!C2の式を次の判定式に置き換えます。
=IF(COUNTIFS(希望!$A$2:$A$1000,勤務!$A2,希望!$B$2:$B$1000,勤務!C$1,希望!$C$2:$C$1000,"有効")=0,"対象外",IF(勤務!C2="","未入力",IF(COUNTIF(設定!$A$2:$A$20,"="&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(勤務!C2,"~","~~"),"*","~*"),"?","~?"))>0,"勤務と重複",IF(COUNTIF(設定!$B$2:$B$20,"="&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(勤務!C2,"~","~~"),"*","~*"),"?","~?"))>0,"一致","記号確認"))))
IFは、条件を満たす場合と満たさない場合で、返す値を分ける関数です。この式では、次の順序で判定します。(マイクロソフト)
| 判定条件 | 表示 | 管理者が行うこと |
|---|---|---|
| 有効な希望がない | 対象外 | 希望休の照合対象ではないと区別する |
| 希望があり、勤務セルが空欄 | 未入力 | 勤務・休みの予定を確認して入力する |
| 希望があり、勤務記号が入っている | 勤務と重複 | 本人との調整や勤務変更を検討する |
| 希望があり、休み記号が入っている | 一致 | 休み記号が入っていることを確認する |
| 希望があり、どちらにもない記号 | 記号確認 | 誤入力か、設定への登録漏れかを調べる |
式中のSUBSTITUTEは、「?」「*」などを検索用の特殊文字ではなく、入力された文字として照合するための処理です。勤務セルそのものは変更しません。(マイクロソフト)(マイクロソフト)
コピー範囲と条件付き書式を設定する
C2の式をAG2まで右へコピーし、続いてC2:AG2を51行目までコピーします。
参照の固定には、次の意味があります。$を付けた行・列はコピーしても固定され、付けていない部分はコピー先に応じて変わります。(マイクロソフト)
勤務!$A2:IDのA列を固定し、下へコピーすると行が変わる。勤務!C$1:日付の1行目を固定し、右へコピーすると列が変わる。勤務!C2:判定対象の勤務セルが右・下へ移る。希望!$A$2:$A$1000など:検索範囲全体を固定する。
次にチェック!C2:AG51を選び、[ホーム]→[条件付き書式]→[新しいルール]→[数式を使用して、書式設定するセルを決定]から、以下のルールを別々に登録します。適用先はすべて=$C$2:$AG$51です。(マイクロソフト)
| 数式 | 塗りつぶしの例 |
|---|---|
=C2="勤務と重複" | 赤 |
=C2="未入力" | 黄 |
=C2="記号確認" | オレンジ |
ルール内のC2には$を付けません。色だけに頼らず、判定の文字も残しておきます。
6つの入力例で表示を確かめる
以下は、勤務!A2が「S001」の場合の架空例です。表の結果は数式の分岐に基づく期待表示であり、実際のブックでの検算に使うものです。 設定には「早・遅・日」と「休・有休」を登録した状態にします。希望シートには、S001の該当日と状態を1行ずつ入力してください。「登録なし」の日は行を作りません。
| 日付・勤務セル | 希望の状態 | 勤務の入力 | チェックの期待表示 |
|---|---|---|---|
| 2026/10/1・C2 | 有効 | 早 | 勤務と重複 |
| 2026/10/2・D2 | 有効 | 休 | 一致 |
| 2026/10/3・E2 | 有効 | 空欄 | 未入力 |
| 2026/10/4・F2 | 有効 | 研(未登録) | 記号確認 |
| 2026/10/5・G2 | 登録なし | 早 | 対象外 |
| 2026/10/6・H2 | 取消のみ | 早 | 対象外 |
「対象外」は正常や承認済みを意味しません。有効な希望がない日の未入力・未登録記号は、この判定では検出しない設計です。
コピーの確認も行いましょう。別の検算用コピーで、希望を「S001の10月1日」「S002の10月2日」の2件だけにし、両名の両日を「早」にします。S001が2行目、S002が3行目なら、チェック!C2とD3だけが「勤務と重複」、D2とC3は「対象外」が期待値です。
希望があるのに反応しないときの確認
想定外の「対象外」が出たら、判定式を変える前に、ID・年月日・状態の3条件を元データで確認します。希望一覧への転記漏れも含めて調べてください。
未登録ID・日付・対象範囲を調べる
日付の確認には、希望!E2に次の式を入れ、入力済みの最終行までコピーします。
=IF(ISNUMBER(B2),IF(B2=INT(B2),"整数","時刻あり"),"文字・空欄")
Excelは日付を数値として保持し、時刻は日付を構成する小数で表します。そのため、「整数」は日付候補、「時刻あり」「文字・空欄」は修正対象として分け、その後に対象月を確認します。(マイクロソフト)(マイクロソフト)
「整数」でも、別の年・月の日付なら対象外です。年月日が見える表示にして、2026年10月か確認しましょう。文字列や不要な時刻が見つかったら、提出内容を確かめて日付だけを再入力します。勤務シートのC1:AG1にも同じ確認が必要です。
さらに希望!F2へ=COUNTIF(勤務!$C$1:$AG$1,B2)を入れると、その日付が勤務表の見出しにあるかを調べられます。0なら日付の欠落・範囲外、2以上なら見出しの重複を確認してください。
人数や日数を増やしたときは、ID参照、判定式のコピー先、条件付き書式の適用先も更新します。31日目や追加スタッフだけ検査から漏れないようにします。
取消と記号の追加を反映する
取消を別行に追加しても、同じID・年月日の「有効」が残っていれば、この式は希望ありと判定します。該当する有効行を「取消」に更新し、重複行を整理してください。
「研」が研修勤務を意味するなら、内容を確認したうえで設定の勤務記号へ追加します。その場合、表示は「記号確認」から「勤務と重複」に変わる想定です。警告を消すためだけに休み記号へ入れてはいけません。
20行目を超えて記号を追加する場合は、判定式の設定参照範囲も広げます。
修正後に再確認して配布する
修正するのは、チェックシートの結果ではなく勤務シートの入力です。検算例の勤務!C2を「早」から「休」へ変えれば、チェック!C2は「勤務と重複」から「一致」に変わる想定です。希望行は削除せずに残します。
再検査では、次の順に進めてください。
- 本人との調整結果に基づいて勤務を修正する。
- 変更した日だけでなく、早番・遅番など各時間帯の必要人数を確認する。
- 元データの事前検査と希望休の照合をやり直す。
- 未解決の表示がないか確認し、配布用の版を保存する。
表示が更新されない場合は再計算します。Windows版ExcelではF9による再計算を使えます。画面操作の案内は2026-09-21時点の公式資料に基づきます。(マイクロソフト)
この検査は、希望の確約や法的違反の自動判定ではありません。勤務表の二つの版の差分比較も対象外です。希望と勤務が重なった理由や最終的な対応は、管理者が別途確認してください。
希望収集から確定まで繰り返す場合
毎月のシフト管理で希望の転記や催促が負担なら、照合式だけでなく収集方法も見直す余地があります。シフトラには、LINE・メールなどによるシフト希望の収集と、自動リマインドの機能があります。2026-09-21時点の公開情報です。(シフトラ)
ただし、希望収集の仕組みを変えただけで、既存Excelの照合や必要人数の確認が完了するわけではありません。まずは実際のID・勤務記号・対象月・行数に式を合わせ、元データの確認、勤務の修正、再検査までを同じ手順で繰り返せる状態に整えましょう。