エクセルの当番表ローテーションを関数で完全自動化する仕組み作り

独立した関数の歯車を組み合わせて手作業のミスをゼロにするエクセル当番表自動化の全体設計図スライド

SkillStack Lab 運営者の「スタック」です。

エクセルを使った当番表のローテーション作成って、本当になかなか骨が折れる作業ですよね。

特にカレンダーと睨めっこしながら土日祝を除く作業や、会社の独自休日を除外して担当者の順番を割り当てていく作業は、手作業だとどうしてもミスが起きやすいかなと思います。

かつての私も複雑な数式を使わずに気合で管理していて、痛い目を見ました。

この記事では、WORKDAYやNETWORKDAYSといった日付計算の仕組みを応用して、エクセル上で当番表のローテーションを自動化する関数の活用法を解説していきます。

手入力の煩わしさから解放されて、本来の業務にもっと時間を使えるようになるはずです。一緒に効率化の第一歩を踏み出してみましょう。

この記事で分かること
  • カレンダーから土日や祝日などの休業日を自動的に除外する関数の使い方
  • 特定の曜日が休みの職場でも対応できる柔軟な日付計算の仕組み
  • 担当者の順番が自動的にループして割り振られるローテーション数式の組み方
  • 当番回数の偏りを防ぎ公平なスケジュールを維持するための監査チェック手法
目次

失敗から学ぶエクセルの当番表ローテーション関数

まずは日付の計算という土台作りから始めていきましょう。

エクセルで当番表のローテーションを関数を使って組もうと思ったとき、一番の壁になるのが「お休みの日をどうやって賢く飛ばすか」という部分ですね。

ここでは私の過去の失敗も交えながら、日付計算の基本と、なぜ手作業での管理が危険なのかを深掘りして解説していきます。

手作業の土日祝確認漏れで起きた情シス時代の悲劇

アナログ作業が招いた現場からのクレーム

情シスとして社内システムを管理していた頃、私は手作業で当番表を作っていました。

卓上カレンダーを目視で確認しながら、エクセルの行を一つずつ埋めていくアナログな手法です。当時は関数を使う発想がなく、「毎月のことだから気合で乗り切ろう」と考えていました。

でも、ある月のシフト作成時、会社の創立記念日と振替休日の存在をすっかり忘れて当番を割り当ててしまい、現場のスタッフから「休みの日なのに当番が入っているんですが…」と指摘を受ける苦い経験をしました。

目視チェックの限界と再計算の手間

この一件で、目視確認によるスケジュール管理は必ずヒューマンエラーを引き起こすかも、と痛感したんですよね。担当者が急病で休んだり、新しいメンバーが増減したりしたときの再計算の手間も膨大です。

1箇所でも日付がズレると、その後の担当者の順番をすべて手作業で直し、その都度カレンダーの曜日を見直す必要があります。こういった手作業でのカレンダー管理は、担当者の心理的な負担も大きく、早々に限界を迎えます。

目視確認から祝日の漏れ、現場のクレーム、膨大な再計算へとつながる手作業管理の悪循環を示す図解

WORKDAY関数で土日祝を除く数式を組む

連続した日付から不要な日を間引く魔法

そこで強い味方になってくれるのが、WORKDAY(ワークデイ)関数です。

エクセルはそもそも、日付を1900年1月1日を起点とした「シリアル値」という連続した数字として認識しています。

この連続した数字の中から、土曜日と日曜日を自動的にスキップして、実質的な稼働日だけを算出してくれるのが、この関数の素晴らしいところです。

WORKDAY関数の基本構文

=WORKDAY(開始日, 日数, [祭日])

開始日を起点として、指定した「日数」だけ後の稼働日を返します。第3引数の「祭日」に祝日リストの範囲を指定すれば、土日だけでなく祝日も計算から除外できます。

手作業の行削除とおさらば

例えば、月の初日(開始日)を起点にして、翌営業日(日数に「1」を指定)を求める数式を一つ作ります。

あとはそのセルを下に向かってオートフィルでコピーしていくだけで、土日祝がきれいに抜けた「純粋な営業日カレンダー」が数秒で完成します。

手作業で休みの日の行を一つずつ削除したり、詰めたりしていたあの苦労は一体何だったのかと思うくらい、あっけなく解決するはずです。これでカレンダー作成のベース部分は完璧ですね。

WORKDAY関数を使用してシリアル値から土日祝日を自動的に除外する仕組みの解説図

WORKDAY.INTLで独自の休業日を除外

曜日をバイナリ文字列でコントロールする

月曜日から金曜日までが稼働日という標準的なオフィス環境なら、先ほどのWORKDAY関数で十分対応できます。

しかし、飲食店やクリニック、あるいはシフト制の製造現場だと「水曜と木曜が定休日」といったケースもありますよね。特定の曜日を除外したい場合は、さらに柔軟なWORKDAY.INTL(インターナショナル)関数を使います。

この関数には「週末」という引数が追加されていて、どの曜日を休みにするかを7桁の「0」と「1」のバイナリ文字列で自由に指定できるんです。

「0」が稼働日で、「1」が休業日ですね。数字の並びだけでカレンダーのオンオフを制御できる、非常にプログラマブルな機能です。

バイナリ文字列指定システム上の解釈ビジネスモデルの適用例
“0000011”月〜金稼働、土・日休業標準的なオフィス環境(WORKDAY関数と同等)
“0101000”月,水,金,土,日稼働、火・木休業火曜・木曜が定休日の店舗シフト、美容院など
“1000000”火〜日稼働、月曜休業月曜日のみが休館日となる図書館や美術館
“0000000”全曜日稼働(休みなし)年中無休のコールセンターや病院の24時間体制

文字列の1文字目が月曜、7文字目が日曜に対応しています。

自社の休業日に合わせて「1」を立てるだけで、どんな変則的なカレンダーにもすんなり対応できます。複数の店舗を管理している場合でも、店舗ごとの定休日に合わせたカレンダーを瞬時に出力できるのは大きな強みです。

7桁の数字で休日を制御するWORKDAY.INTL関数と総稼働日数を算出するNETWORKDAYS関数の仕組み

NETWORKDAYS関数で総当番枠数を計算

全体のパイを把握して適正な目標値を算出する

日付のリストアップと並行してやっておきたいのが、「その月に当番枠が全部で何回あるのか」の事前把握です。

稼働日のリストは作れても、そもそも今月は何回当番を回さなければいけないのかが見えていないと、適切なリソース配分はできません。ここで役立つのがNETWORKDAYS(ネットワークデイズ)関数ですね。

総稼働日数をスカラー値で取得する

WORKDAY関数が「特定の日数経過後の日付」というカレンダー上のポイント(点)を出すのに対し、NETWORKDAYS関数は「2つの日付(月初と月末など)の間に存在する稼働日の総数」という期間(量)を整数で出してくれます。

例えば、NETWORKDAYS関数で算出した月の総営業日が「21日」で、担当メンバーが「7人」だとします。

単純な割り算をすれば「1人あたりの適正な当番回数は3回だな」という目標値(ベンチマーク)がサクッと導き出せますよね。

この全体像を把握しておくことが、後々のフェーズで公平なスケジュールを組む際にとても効いてきます。

※労務管理に関する注意点

当番回数の上限や連続勤務の制限など、ここで紹介する数値データや考え方はあくまで一般的な目安です。

労働基準法などの正確な法規制に関する情報は、公的な機関のガイドラインをご確認ください(出典:厚生労働省『労働時間・休日』)。

実際の労務管理システムやシフト作成における最終的な判断は、社労士などの専門家にご相談くださいね。

自動化を叶えるエクセル当番表ローテーション関数

土日や祝日を除外した稼働日だけのカレンダーができあがったら、次はいよいよその日付に対して担当者を割り当てていくステップですね。

エクセル上の当番表ローテーションを関数で完全に自動化するための、ちょっとした数式のパズルを楽しんでいきましょう。ここからは論理的なアルゴリズムの構築に入ります。

ROWとMOD関数で順番のループを自動化

エクセルの行進行を利用した剰余算(モジュラ演算)

担当者がAさんからEさんまで5人いる場合、5番目まで割り当てたら次はまた1番目(Aさん)に戻るという「ループ処理」が必要です。

これを手作業のコピペではなく関数で行うために、ROW(ロウ)関数とMOD(モッド)関数を組み合わせます。

この組み合わせは、いわゆる「割り算の余り(剰余)」を利用した数学的アプローチです。ROW関数は「現在いるセルの行番号」を取得します。

例えば1行目なら「1」、2行目なら「2」ですね。ここから「1」を引いてゼロベースの数字を作り、MOD関数を使ってメンバー数である「5」で割った余りを計算します。

行が下に進むごとに数字は「0, 1, 2, 3, 4, 5, 6…」と増えていきますが、これを5で割った余りは「0, 1, 2, 3, 4, 0, 1…」と規則的にループします。

最後に「+1」をしてあげることで、「1, 2, 3, 4, 5, 1, 2…」というように、絶対に途切れない順番のサイクルが生まれるんですよね。

この理屈を利用すれば、メンバーが何人に増減しても、割る数を変えるだけで無限のループを作り出すことができます。

エクセルの行番号と割り算の余りを利用して途切れない順番のサイクルを生み出す仕組みの図解

INDEX関数を用いてメンバーの順番を決定

インデックス番号を名前に変換する仕組み

ループするインデックス番号の羅列ができたら、最後はそれを実際のメンバー名に変換してあげます。

ただの数字の羅列では、誰が当番なのか分かりませんからね。ここで登場するのがINDEX(インデックス)関数です。

この関数は、指定した範囲の中から「〇番目のデータ」をピンポイントで抽出してくれる機能を持っています。事前に別のセル範囲に「StaffList」という名前でメンバーのリスト(Aさん、Bさん、Cさん…)を用意しておきます。

そして、=INDEX(StaffList, ループで計算した番号)という風に数式を組み合わせることで、MOD関数が吐き出した数字が1ならリストの1番目であるAさん、2ならBさん、という具合に名前を自動で引っ張ってくることができます。

循環する数字を実際の担当者名に引き直すINDEX関数の名簿参照の仕組み

独立した歯車の組み合わせが鍵

WORKDAY関数が「日付の歯車」を不規則に(休業日を飛ばしながら)回し、このROW・MOD・INDEXの組み合わせが「担当者の歯車」をエクセルの行進行に合わせて規則的に回します。

この独立した2つの機能が横並びのセルで噛み合うことで、お休みを避けつつも担当の順番は飛ばされない、完璧なローテーションが完成するんです。

日付を間引くWORKDAY関数と人を回すROW/MOD/INDEX関数が同じ行で連動する統合設計図

COUNTIF関数で当番回数の偏りを監査

リアルタイムの集計パネルで不公平をなくす

自動で順番を割り当てた後は、「本当に特定の人に負担が偏っていないか?」をチェックする仕組みも忘れずに用意しておきたいですね。

いくら自動化システムとはいえ、カレンダーの日数とメンバー数の組み合わせによっては、毎月月末の忙しい日ばかり当番になってしまう人が出るなど、思わぬ偏りが発生することがあります。

システムを組むなら、こういった監査機能は必須かなと思います。

ここではCOUNTIF(カウントイフ)関数を使って、当番表の範囲内で各メンバーの名前が何回登場しているかをカウントします。当番表の横に小さな集計表を作り、メンバーごとにこの関数を仕込んでおきましょう。

条件付き書式との連携でエラーを視覚化

先ほどのNETWORKDAYS関数で割り出した「1人あたりの適正回数」と、このCOUNTIF関数の結果を見比べるようにしておけば、偶然誰かの当番が多くなってしまった場合でも、すぐに気付いて手動で微調整をかけることができます。

さらに、エクセルの「条件付き書式」と組み合わせて、「当番回数が規定値をオーバーしたらセルを赤く塗りつぶす」といった設定をしておけば、急なシフト変更の際にも過重労働を未然に防ぐ強力なフェイルセーフとして機能します。

COUNTIF関数と条件付き書式を用いて特定の担当者への負担偏重を監視する自動集計パネルのイメージ

祝日マスターを定義し数式のメンテナンスを軽減

変動データを分離する「名前の定義」の活用

日本のカレンダーは、振替休日やハッピーマンデー制度によって毎年祝日が変動しますよね。

そのため、WORKDAY関数の数式の中に直接カレンダーの日付(シリアル値)を書き込んでしまうと、翌年になったらまた数式をイチから直さなければならず、非常に面倒です。

これではせっかくの自動化が台無しになってしまいます。

「名前の定義」を活用する

変動するデータは数式から切り離すのがシステム構築の基本です。

別シートに「祝日マスター」を作ってその年の祝日リストを縦に並べ、エクセルの「名前の定義」機能で範囲に名前(例:祝日リスト)をつけてしまいましょう。

数式側からは=WORKDAY(開始日, 1, 祝日リスト)というように名前で参照しておけば、来年以降は裏側のリストを内閣府などが発表する最新版にコピペして差し替えるだけで済みます。

表側の当番表の複雑な数式には一切触れなくても、自動的に最新のスケジュールに切り替わります。保守メンテナンスの手間が劇的に下がるので、絶対にやっておきたいベストプラクティスですね。

誰でも使えるように数式をIFERRORで保護

現場のパニックを防ぐフェイルセーフ設計

せっかく作った自動化システムも、作成したあなた以外のスタッフが触る機会が多いと思います。

誰かが誤って日付入力欄に「4月吉日」のように日付以外の文字を入力したり、マスターデータの参照先をうっかり消してしまったりすると、どうなるでしょうか。

WORKDAY関数は計算不能に陥り、「#VALUE!」のような見慣れないエラーコードを吐き出します。そして、それが後続のセルに連鎖して、表全体がエラーだらけになり、現場のスタッフがパニックになってしまうかも。

そうならないために、メインの計算式全体をIFERROR(イフエラー)関数で包み込んでおくことを強くおすすめします。

=IFERROR(メインの数式, "日付の入力を確認してください")

このように設定しておけば、エラーが起きた時でも見苦しいエラーコードではなく、親切なメッセージが表示されるため、操作している人が自分で間違いに気づいて修正できるようになります。

システムは作って終わりではなく、使ってくれる人へのちょっとした配慮(UXの向上)が現場定着の鍵になりますね。

変動する祝日リストを分離する名前の定義と、エラー表示を案内文に変えるIFERROR関数の活用図

💡 完璧な「神エクセル当番表」は、会社にとって一番危険な時限爆弾かもしれません

記事で解説した通り、複数の関数を組み合わせればエクセルでも見事なローテーションを組むことは可能です。しかし、少し立ち止まって考えてみてください。

どれだけIFERROR関数で保護しても、「作ったあなた(エクセル職人)が異動や退職をした途端に、誰も数式を直せなくなる」という致命的な属人化のリスクは消えません。

「毎年変わる祝日マスターの更新を、来年もあなたが担当しますか?」

「他のスタッフが誤って数式を消してパニックになった時、あなたの業務を止めて対応しますか?」

高度な関数を駆使して「神エクセル」を作り上げるのは、かつてのVBA職人が残した「誰も触れないブラックボックス」と同じ歴史を繰り返す危険なサインです。

当番表やシフト管理といった全社を巻き込む定型業務こそ、誰でも直感的にスマホから操作でき、祝日のアップデートなどもベンダーが自動で行ってくれる「専用SaaS」に丸投げするのが、管理部門の鉄則です。

「自分が休むと回らないエクセル保守」から解放されたい担当者に向けて、元情シスの視点で実務にすぐ導入できる「脱エクセルSaaSツール」を厳選しました。

まずは無料で試せるツールから、システム管理のプレッシャーがない圧倒的な「安心感」を手に入れてください。

\ 属人化したエクセルの保守担当から今すぐ卒業! /

👉 【元社内SEが警告】バックオフィス向け脱エクセルツールの決定版!無料で試せる神アプリ5

エクセル当番表ローテーション関数の構築まとめ

いかがだったでしょうか。今回は、エクセルにおける当番表のローテーションを関数を使って自動化するアプローチについて、かなり踏み込んで解説してきました。

WORKDAY関数やWORKDAY.INTL関数で賢く休業日を避け、ROW関数やMOD関数で順番のループを数学的に構築し、COUNTIF関数とNETWORKDAYS関数で公平性を保つ。

これらを組み合わせることで、単なる表計算だったファイルが、立派なスケジューリングのアプリケーションへと進化します。

手作業でのカレンダー確認や、行を削ってコピペする作業から解放されれば、属人的なミスも減り、チーム全体のストレスも大きく軽減されるはずです。

最初に関数を組み立てる時だけ少し頭を使いますが、一度作ってしまえばあとは「祝日マスター」を更新するだけ。非常に投資対効果の高い業務改善です。

ぜひ今回ご紹介したエクセルの当番表ローテーション関数を活用して、皆さんの職場でもバックオフィス業務のスマートな自動化を実現してみてくださいね。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次