やること
「$n$人のメンバー表から順番に今日の当番を割り当てる(ただし休日はスキップする)」ようなシートを作成します。
サンプルは以下にアップロードしてあります。
ローカルにコピーし、メンバー部分を編集することで、そのまま利用できます。
ただし、このサンプルでは祝日を考慮していません(祝日を考慮する方法は最後に解説します)。
解説
サンプルシートは以下の要素で成り立っています。
- 基準日からの経過営業日数計算
- 1をメンバーに割り当てる変換
以下、それぞれ解説していきます。
1. 基準日からの経過営業日数計算
この値はサンプルシートのA, B列で計算しています。
基準日は、シートの運用開始日時より過去であれば何日が入っていても大丈夫です。
A | B | |
---|---|---|
1 | 基準日 | 基準日からの経過営業日数 |
2 | 2023/4/1 | =NETWORKDAYS(A2, today()) |
ここで肝となるのがNETWORKDAYS
関数です。
この関数は、開始日から終了日までの土日を除いた日数を返してくれます。
祝日を考慮する場合については最後に解説しています。
2. 1をメンバーに割り当てる変換
この変換を行なっているのがG列です。
... | G | |
---|---|---|
1 | ... | 今日の担当者 |
2 | ... | =INDIRECT("D" & (mod(B2, E2) + 2)) |
ここで肝となるのがMOD
関数です。
サンプルシートのmod(B2, E2)
の部分では、「基準日からの経過営業日数をメンバー数で割った余り」を計算しています。
今回はメンバー数が3なので、この値は0, 1, 2のいずれかになります。
+ 2
の部分は、メンバー列が2行目から始まることに合わせるためのオフセットです。
おまけ: 祝日を考慮する方法について
NETWORKDAYS
関数の第3引数には、祝日(祝日としてみなす)期間を入力することができます。
サンプルを祝日考慮版にするためには、以下の作業が必要です。
- 基準日を
=year(today()) & "/01/01"
(今年の1月1日)に変更する - 祝日シートを作成し、
=NETWORKDAYS(A2, today(), 作成した祝日の範囲)
と変更する
基準日を変更しているのは、過去分の祝日全てを保持しなくてもいいようにするためです。
ただし、これを行うと年末年始で当番がズレる点に注意が必要です。
祝日シートの作成方法は以下を想定しています。