エクセルのシフト表を職員別に印刷するには、既存の月間表を残し、同じブックに「個人用」シートを追加します。職員IDで一人分の日付・曜日・勤務を縦に取り出し、個人用シートのA1:C44だけをA4で出力する方法です。
同姓同名の職員がいる場合も、氏名ではなく一意のIDで対象者を指定します。以下のセル対応表と8個の数式を使い、未登録・重複ID、勤務の未入力、月末の日付を確認してから印刷へ進めましょう。
操作説明はWindows版のデスクトップExcelを想定しています。公開情報の確認日は2026-10-03時点で、セル配置・数式の組み合わせは本稿独自の作例です。
元表の位置と、職員IDを確認する
シフト管理では、勤務を修正する元表と、職員へ渡す個人用の表を分けておくと、修正先が明確になります。まず既存ブックの控えを保存し、元表のシート名とセル位置を確認してください。
この作例のセル配置と勤務区分
以下は、氏名・勤務時間ともに架空の説明例です。必要人数、休憩の配置、勤務配置の適法性を評価したものではありません。
元表のシート名を「原表」とし、次の位置に情報があるものとして進めます。
| 情報 | 原表の位置 | 入力内容・個人用への対応 |
|---|---|---|
| 対象月 | B1 | 実日付の2026/10/1。個人用B4へ |
| 固定更新日時 | B2 | 2026/10/03 17:30。個人用B5へ |
| 職員ID | A5:A8 | 個人用B2で指定するIDの検索対象 |
| 氏名 | B5:B8 | 個人用B3へ |
| 日付 | C4:AG4 | 10月1日〜31日の実日付。個人用A9:A39へ |
| 勤務区分 | C5:AG8 | 選んだ職員の勤務を個人用C9:C39へ |
原表B2には、元表を更新した時点の日時を値として固定入力します。開くたびに日時が変わるNOW関数は使いません。
職員と勤務の入力例は次のとおりです。E001とE002は、どちらも「佐藤 花」ですが勤務が異なります。
| 原表の行 | 職員ID | 氏名 | 1日・C列 | 2日・D列 | 3日・E列 | 31日・AG列 |
|---|---|---|---|---|---|---|
| 5 | E001 | 佐藤 花 | 早 | 休 | 日 | 早 |
| 6 | E002 | 佐藤 花 | 遅 | 早 | 休 | 休 |
| 7 | E003 | 高橋 健 | 日 | 日 | 日 | 日 |
| 8 | E004 | 田中 真 | 休 | 早 | 遅 | 遅 |
作例を再現する場合、4〜30日は各職員とも、4日から「早→遅→日→休」の順で繰り返し入力してください。これは抽出を確かめるための検算用データであり、勤務案の推奨例ではありません。勤務区分の時刻は、後述する印刷用の凡例に記載します。
ID・日付・勤務欄を数式で参照できる状態にする
IDはE001形式の半角英数字にそろえ、前後の空白を取り除きます。*・?・~を含むIDは、そのまま検索条件に使わないでください。MATCHにはワイルドカードの扱いがあるため、異なるID形式を使う場合は一致条件の調整が必要です。(Microsoft)
日付見出しは「1」「2」という日番号や文字列ではなく、年月日を持つ実日付にします。参照範囲にセル結合がある場合は先に整え、色だけで勤務を表している場合は「早」「休」などの値を入力してください。本稿の式は値を取り出すもので、セル色・書式・コメントをコピーする設計ではありません。
個人用シートにIDと基本情報を置く
同じブックに「個人用」シートを作成します。A1に「個人別シフト表」、A2:A6に順番に「職員ID」「氏名」「対象月」「更新日時」「状態」と入力し、B2を対象者のID入力欄にしてください。
まずB2へ「E001」を入力し、以下の5式を指定セルへ貼り付けます。
B6:IDの状態
=IF($B$2="","ID未選択",IF(COUNTIF('原表'!$A$5:$A$8,$B$2)=0,"ID未登録",IF(COUNTIF('原表'!$A$5:$A$8,$B$2)=1,"表示可","ID重複")))
COUNTIFで指定IDに一致するセルを数え、0件・1件・複数件を分けます。(Microsoft)
この作例の「表示可」は、IDが1件だけ見つかったという意味です。勤務内容の完成や印刷の承認を表すものではありません。
E2:一致した職員の位置
=IF($B$6="表示可",MATCH($B$2,'原表'!$A$5:$A$8,0),"")
MATCHの第3引数を0にすると完全一致で検索し、範囲内の位置を返します。その位置をINDEXへ渡して値を参照します。(Microsoft)
作例ではE001が1、E002が2です。原表の行番号「5」「6」ではない点に注意してください。E2は計算用の補助セルで、印刷範囲には含めません。
B3:氏名
=IF($B$6="表示可",INDEX('原表'!$B$5:$B$8,$E$2),"")
B4:対象月
='原表'!B1
B5:更新日時
='原表'!B2
個人用B4の表示形式はyyyy年m月、B5はyyyy/mm/dd hh:mmに設定します。氏名や更新日時が途中で切れないよう、B列の幅も調整しましょう。
日付・曜日・勤務を縦に取り出す
個人用A8:C8に「日付」「曜日」「勤務」と入力します。続いてA9・B9・C9へ、残りの3式を貼り付けてください。
A9:原表の日付
=IF(INDEX('原表'!$C$4:$AG$4,1,ROW()-8)="","",INDEX('原表'!$C$4:$AG$4,1,ROW()-8))
B9:曜日
=IF(A9="","",CHOOSE(WEEKDAY(A9),"日","月","火","水","木","金","土"))
C9:指定した職員の勤務
=IF(OR($A9="",$B$6<>"表示可"),"",IF(INDEX('原表'!$C$5:$AG$8,$E$2,ROW()-8)="","未入力",INDEX('原表'!$C$5:$AG$8,$E$2,ROW()-8)))
A9:C9を選択し、39行目まで下へコピーします。A9:A39の表示形式はm/dに設定してください。
ROW()-8は、9行目では1、11行目では3、39行目では31になります。これによって原表のC列、E列、AG列を順番に参照する仕組みです。出力開始行を9行目以外へ移す場合は、引く数の8も変更しなければなりません。
この処理は、既存の勤務を取り出す「自動表示」です。勤務案の自動割当や勤務時間の自動集計ではありません。また、B4の対象月は表示用であり、その月の日付を生成したり、別月の日付を除外したりする条件にはなっていません。
同姓同名・空欄・0・月末の確認例
次の表は、架空データから求めた確認用の期待値です。Excel本体での動作確認や実際の印刷結果を示すものではありません。利用するブックでB2を切り替え、同じ内容になるか照合してください。
| 個人用の日付・曜日 | B2がE001の場合の勤務 | B2がE002の場合の勤務 |
|---|---|---|
| 10/1・木 | 早 | 遅 |
| 10/2・金 | 休 | 早 |
| 10/3・土 | 日 | 休 |
| 10/31・土 | 早 | 休 |
両者ともB3は「佐藤 花」ですが、勤務はIDごとに変わります。先頭3日だけでなく、39行目の10月31日まで確認しましょう。
続いて、原表の控えで次の条件を一つずつ試します。確認後は元の入力へ戻してください。
- B2を空欄にする: B6は「ID未選択」。氏名と勤務は空欄になります。
- B2にZ999を入力する: B6は「ID未登録」。氏名と勤務を出さず、印刷を中止します。
- 原表のE001を2件にする: B6は「ID重複」。先に見つかった一人を印刷せず、IDを修正します。
- E001を選び、原表E5を空欄にする: 個人用C11は「未入力」。休みには置き換えません。
- 原表E5に数値の0を入れる: 個人用C11も0のままです。この作例の凡例にはないため、勤務区分を確認するまで出力を止めます。
IDが未登録・重複の場合でも、日付・曜日・対象月・更新日時は残る設計です。紙面が埋まっていることだけで印刷可と判断しないでください。
月末の確認では、原表B1と日付見出しを対象月へ変更し、存在しない日の見出しを空欄にします。
| 確認する対象月 | 原表で空欄にする日付見出し | 個人用で空欄になる範囲 |
|---|---|---|
| 2026年11月・30日まで | AG4 | A39:C39 |
| 2027年2月・28日まで | AE4:AG4 | A37:C39 |
| 2028年2月・29日まで | AF4:AG4 | A38:C39 |
勤務欄だけ消して、不要な日付見出しを残さないことが重要です。日付が残れば、その行も取り出されます。対象月と日付見出しが一致しているかは、管理者が確認する必要があります。
一人分だけをA4へ印刷する
個人用A40に「勤務凡例」と入力し、41〜44行へ次の内容を置きます。C41:C44は空欄で構いません。
| 行 | A列:勤務区分 | B列:意味 |
|---|---|---|
| 41 | 早 | 9:00〜17:00 |
| 42 | 遅 | 13:00〜21:00 |
| 43 | 日 | 10:00〜18:00 |
| 44 | 休 | 休み |
実際の表へ移すときは、元表で使っている勤務区分と時刻に置き換えてください。区分だけでなく、意味が読める状態で出力します。
印刷設定は、次の順に行います。
- 「個人用」だけを選ぶ。 複数のシートをまとめて選択した状態にしないでください。
- A1:C44を選び、印刷範囲に設定する。 既存の設定があれば[ページ レイアウト]→[印刷範囲]で一度クリアしてから設定します。印刷範囲はブックとともに保存できます。(Microsoft)
- 用紙をA4、向きを縦、横を1ページにする。 [ページ設定]で用紙・方向・拡大縮小を指定します。縦のページ数は、まず未指定または自動として確認してください。(Microsoft)
- [ファイル]→[印刷]で出力対象を確認する。 [アクティブなシートを印刷]を選び、印刷範囲を無視する設定にしません。[選択した部分を印刷]を使う場合は、選択範囲がA1:C44であることを確認します。ブック全体の印刷とは区別してください。(Microsoft)
縦も1ページにするのは、文字が読める場合だけです。小さすぎる場合は縦を自動へ戻し、複数ページで出力しましょう。その際は[印刷タイトル]の[タイトル行]を$1:$8に設定すると、ID・対象月・見出しを各ページへ載せられます。(Microsoft)
対象月・更新日時・他職員の情報をプレビューで見る
実際に使うプリンターやPDF出力先を選び、全ページのプレビューを確認します。確認対象は次の4点です。
- B2のIDとB3の氏名が、渡す相手と一致している。
- 対象月、固定更新日時、月末の日付、勤務凡例が読める。
- 「未入力」、凡例外の値、数式エラーが残っていない。
- 原表、補助E列、他職員の勤務、不要なヘッダー・フッターが出ていない。
B6が「表示可」でも、未入力や凡例外の値があれば印刷を中止してください。この数式はExcelの印刷操作自体を禁止するものではありません。 紙なら出力物、PDFなら保存したファイルも開き、配布前に対象者とページ内容を確かめます。
元表を変更したときの更新と完成確認
勤務の変更は原表へ入力し、個人用の抽出結果を直接書き換えない運用にします。修正後は原表B2の固定更新日時も更新し、個人用の表示と元表を再照合してください。
職員が増減した場合は、各式にある次の3範囲を、同じ開始行・最終行にそろえます。
- ID:
A5:A8 - 氏名:
B5:B8 - 勤務:
C5:AG8
IDの範囲だけ広げると、見つかった位置と氏名・勤務の参照先が対応しなくなります。対象月の変更時は、B1だけでなく日付見出しと勤務欄も入れ替え、不要な月末列を確認しましょう。
自分の原表へ移す確認欄
式を貼り付ける前に、次の空欄へ実際の位置を書き込んでください。シート名と参照範囲を置き換えた後、同名職員・不正なID・空欄・月末の順に確認します。
| 確認項目 | 作例 | 自分のブックへの記入欄 |
|---|---|---|
| 元表のシート名 | 原表 | [ ] |
| 対象月/更新日時 | B1/B2 | [ ]/[ ] |
| ID範囲 | A5:A8 | [ ] |
| 氏名範囲 | B5:B8 | [ ] |
| 日付範囲 | C4:AG4 | [ ] |
| 勤務範囲 | C5:AG8 | [ ] |
| 出力する職員ID | E001など | [ ] |
| 実プレビューの確認 | A4縦・横1ページ | 縦[ ]ページ/確認者[ ] |
職員別印刷の完成条件は、IDが一意で、日付と勤務が元表に一致し、個人用A1:C44以外の情報が出ないことです。数式の確認だけで終えず、利用するExcel本体と出力先でプレビューまで確かめてください。
元になる勤務表の作成や希望・勤務条件の更新も繰り返しているなら、シフトラの提供範囲を確認できます。既存Excelから設定の下書きを取り込み、条件を反映した勤務案を作る機能があります。取り込みと帳票出力は対応形式と初期設定を確認し、職員別の抽出・対象者の照合・印刷確認は、この記事の手順として行ってください。


