【Excel】カレンダーに固定スケジュールを自動入力する方法

仕事

今の職場では、訪問看護をしています。

どのスタッフがどの患者さんの家に訪問するかを、エクセルで作った月間カレンダーで管理しています。

患者さんやスタッフの人数が多く、以前は全て手書きで管理していました。

手書きからエクセルでの半自動にするために参考にしたYahoo!知恵袋がこちら。

Excelにて毎月決まったサイクルのスケジュールを自動表示させる関数、数式を教えてくださいますか?(毎週O曜日にはA社,隔週△曜日にはB... - Yahoo!知恵袋
Excelにて毎月決まったサイクルのスケジュールを自動表示させる関数、数式を教えてくださいますか?(毎週O曜日にはA社,...

自分の備忘録のためと、似たようなことで困っている方のために解説を書きます。

エクセルで毎月決まったサイクルのスケジュールを自動表示させる方法

完成図

知恵袋の回答のままだとわかりにくい部分があったので、少し変更しています。

赤色のA列・B列が作りたいカレンダーの部分です。

黄色のD列・E列は入力したい予定を入れます。

青色のF列・G列・H列・I列は参照用で、一度入力したらずっとそのままです。

E列に表示させたい予定を入力し、D列にその予定に対応する区分の数値(何週目の何曜日か)を入力しておきます。

E列とD列のデータをVLOOKUP関数を使って参照します。

ただし、1つの曜日に1つの予定しか入力できません。

また、「第〇週目」の予定も1つしか指定できません。(完成図では第1金曜)

ただ、C列にもVLOOLUP関数を使ってデータを参照させるようにするなど、工夫はできると思います。

数式の意味

F列:その月の何週目になるかの式
1日~7日が1、2日~14日が2になります。

G列:何曜日か
日曜日が1、火曜日が2になります。

H列:0の週か1の週かの式
週ごとに0の週、1の週と交互に割り振られます。

I列:区分
100の位が何週目かを表し、10の位が何曜日かを表し、1の位が0の週か1の週かを表す数値を作成しています。
(F2=1)*(G2=6)*の部分は、「第1金曜日」を表示させるための式になっています。

条件が多いときにIF関数を使うと数式が複雑になるため、作業列(F~I列)を使って数値を返し、メンテナンスをしやすくしています。

入力する式

F1セルに「週」
F2セルに次式
=INT((DAY(A2)+6)/7)

G1セルに「曜日」
G2セルに次式
=WEEKDAY(A2)

H1セルに「隔週」
H2セルに次式
=MOD(WEEKNUM(A2),2)

I1セルに「区分」
I2セルに次式
=(F2=1)*(G2=6)*F2*100+G2*10+H2

B2セルに次式を入力します。
=IFERROR(VLOOKUP(I2,$D$2:$E$8,2,FALSE),””)

各数式を下方にコピーします。

使用されている関数

  • INT:小数点以下切り捨て
  • DAY:年月日の「日」のみ取り出す
  • WEEKDAY:曜日を数字で表す(日曜を1とする)
  • MOD:割り算の余りを出す(2で割るので答えが0か1になる)
  • WEEKNUM:その年の1月1日の週を1週目とすると何週目に当たるか(日曜日始まり)
  • IFEROOR:エラーが出た時に非表示(空白セル)にする
  • VLOOKUP:表を縦方向に検索し、特定のデータに対応する値を取り出す

式が美しい……!

シンプルな構造なので応用しやすいと思います。

というか、この記事を書こうと思ったもう一つの理由が、

「その月の何週目か」を計算するのに、「何日+6÷7の小数点を切り捨てる」とか、

「隔週」を計算するのに「その年の週の何週目か÷2の余り」とかでやっているのが美しくて感動したからなんです!!!!!!

プログラミングとかやってる人なら当たり前なのかもしれないですが……!

みなさんもぜひ、この式を使ってみてください!!!

コメント

タイトルとURLをコピーしました