執筆:EugeneAmnis
マクロ無しでシフト表作成ツールその2(使用関数説明編)
前回は実際に作成したシフト表作成ツールの使用方法を説明しました。今回は作成したツールの使用関数など、カスタマイズする上で必要なことを説明していきます。ただし全てを説明していたら大変な長さになるので、条件付き書式やアウトラインなど基本的なことは説明しません。
2024 5/18追記
配布していたツールをバージョンアップしました。シフト数は5つまで、メンバーは22人まで対応したものです。シフトインジケータも新しくなっています。詳しい操作方法はリボン内のShiftMaker2をご覧になって下さい。配布はここから可能です。
ツール内処理の流れ
基本的に今回作成したツールはシート:シフトシミュレータで叩き台となるシフトをRNDBETWEEN関数で自動生成し、そのシフトをコピペしやすいように一つの場所で符号コード化。シート:テンプレートをコピーしたシート:シフト表の指定先のセルに貼り付けて、微調整をしていく方法を取っています。
関数の説明
シフトシミュレータシート
F7セルから始まるメンバーごとの勤務日にはRNDBETWEENとCHOOSEを基本とした関数を入力してあります。動きとしては、メンバーが入力されていて、欠日(-で表記。)でなく定休日でもない場合は希望シフトを50%の確率で抽選し、外れた場合は休日を含むシフト全部で抽選をする形を取っています。シフトが増えた場合はCHOOSE関数の選択項目を増やしていきます。
=IF($B7="","",IF(F$5="-","-",IF(F$5=$C$1,$C$1,IF(AND($D7<>"",RANDBETWEEN(1,2)=1),$D7,CHOOSE(RANDBETWEEN(1,COUNTA($C$1:$R$1)),$C$1,$D$1,$E$1)))))
共通
次に勤務日と勤務人数インジケータを説明します。これらはここのメンバーの簡易シフト管理兼必要人数確認のために実装しています。まずメンバーのシフト管理ではCOUNTIFを中心に関数を組んでいます。動きとしてはメンバーが入力されている場合は各シフトを集計し表示するのみです。総勤務日・人数では合計を表示し、各シフト勤務日・人数では”:”を挟んで表示するだけの違いです。シフトが増えた場合はCOUNTIFを増やしていきます。総勤務日・人数ではCOUNTIFSを使った方がスマートです。
総勤務日
=IF($B7="","",COUNTIF($F7:$AJ7,"=A")+COUNTIF($F7:$AJ7,"=B"))
各シフト勤務日
=IF($B7="","",COUNTIF($F7:$AJ7,"=A")&":"&COUNTIF($F7:$AJ7,"=B"))
総勤務人数
=IF(COUNTIF(L$8:L$29,"="&'2.シフトシミュレータ'!$C$1)=COUNTIF($C$8:$C$29,"<>0"),'2.シフトシミュレータ'!$C$1,COUNTIF(L$8:L$29,"=A")+COUNTIF(L$8:L$29,"=B"))
各シフト人数
=IF(COUNTIF(L$8:L$29,"="&'2.シフトシミュレータ'!$C$1)=COUNTIF($C$8:$C$29,"<>0"),'2.シフトシミュレータ'!$C$1,COUNTIF(L$8:L$29,"="&$E$5))
コピペ範囲を小さくする工夫として実装しているシフトコード化はTEXTJOINを使っています。
テンプレート(シフト表)
シフトが増えても大きな変更点がないので具体的な説明はしませんが、入力されている西暦と各メンバーの希望休日、定休日、貼り付けたシフトコードを元に各メンバーのシフトを表示します。各メンバーの勤務日にはリスト入力が設定されており、インジケータを確認しながら調整していきます。リスト入力の性質上、一度リスト入力すると関数は削除されます。
久しぶりにExcelのシート機能のみでツールを作成しましたが、パズルを解いているようで面白かったです。その内RPGとか作り出すかもしれませんね。(要Excel廃人)ココナラでこのシフト表作成ツールのカスタマイズを承っています。もし宜しければご覧ください。