はもちくわ

コードについて自分なりの解釈を書いてます。

【Excel】関数で万年業務カレンダー(日付固定)を作ってみる〜第1回〜月末判定と曜日の文字列表示

カレンダーには、よく家庭で見る曜日固定のカレンダーと、仕事などの業務上でみる日付固定のカレンダーとありますね。
曜日固定の万年カレンダーは過去記事の「関数で万年カレンダーをつくってみる」で作りましたので、今回は、業務に特化したカレンダーを、日付固定で作ってみます。

また、業務でよく使う、前営業日、翌営業日の判定や、第3火曜日って何日?のような、任意の第nX曜日は何日になるのか?なども計算してカレンダーに反映させましょう。給与支給日なんか前営業日とか翌営業日とか使われますよね。第3月曜日は営業計画を提出だとか(笑)、、、 まっ、、今の私には無用なものですが(泣)

では!早速やっていきましょう!!

今回は下のように記事を5回に分けてアップしていきます。通して書いていたら膨大な量になったので分割することにしました(笑)
記事は作成しながら順番にアップしますが、アップしたらその都度、各記事にリンク貼るようにします。よかったら通して読んでいただけたらうれしいです。

万年業務カレンダーの作成全5回



それでは、5回をとおして、このようなカレンダーを作っていきます。

年と月は数値として別々のセルに入っていて、これを変えると、月末日付と曜日が変化します。
業務予定は日付で指定するものと、第nX曜日のように、曜日で指定するものを準備し、入力するとカレンダーに反映されます。日付指定の予定だけ前営業日か翌営業日を選択できるようになっています。なお、前、翌営業日の選択については、土日だけを休業日とするパターンと、祝日や休業日が別にあるパターンと分けて作成します。
そして、日付、曜日で指定したそれぞれの予定が重複してしまった場合ですが、どちらもカレンダーに表示されるようにします。



それでは、今回は月末と曜日の表示ですので、まず、月末日付の連動から説明していきます。

月末日付の求め方については、過去記事(曜日固定カレンダー)で詳しく解説してますので、ここではおらさらいです。
まず、月末日付の求め方ですが、DATE関数を使って、翌月「1日(ついたち)」の1日前とすれば、求めることができました。さらに、指定方法として、「翌月の0日」とすれば良かったですね。そして日付だけを抽出するには、DAY関数でくくればOKでした。
今回のサンプルで式を書くと、

=DAY(DATE($C$1,$E$1+1,0))

このようになります。
注意点として、DATE関数は「数値」から「日付データ(シリアル)」にする関数ですので、年、月、日は「数値」で指定しなければいけません。
過去記事から見ている方は、あれ?DATE関数の指定の仕方がちょっと違う・・・と感じたかもしれません。
曜日固定カレンダーのときは「日付データ」から年と月を抜き出すために、YEAR関数、MONTH関数を使ってましたが、今回は使っていません。それは、今回、年と月がすでに数値になっていますので、そのまま参照すればいいからです。

さて、このカレンダーには当月分だけ日付表示させるようにしたいですね。
ということは、日付数字がこの式の結果以下、つまり月末以下なら表示するという条件分岐を作れば実現できます。それでは、カレンダー後半に差し込みます。
このサンプルでは次のように作りました。

日付数字は1〜24まではベタ打ちしてあり、25日から計算式が入っています。本来、月の日数がかわることを考えなければならないは28日以降なのですが、変わる日付を手入力で直接変更されて関数が潰れる可能性もあります。こんなときは、バックアップ用に、多めに関数を準備しておくとメンテナンスやリカバリーに便利です。極端な話、この式を2日から入れても構いません。ただ、もしそのようにする場合は、16日から列が分かれるのでご注意ください。



次は曜日を表示します。
これはいくつか方法がありますが、今回は見た目と値が同じになるように設定します。
は?何の話??ってなりますわな(笑)
こちらも過去記事(曜日固定カレンダー)で詳しく解説してますが、もし、曜日だけ表示するなら、日付データに対して表示形式「aaa」と指定するだけで表示されます。この場合は、見た目「曜日」、値「日付」になります。このままCOUNTIF関数なんかで今月の水曜日の数をカウントしようとして、検索値を"水"にすると、水曜日は「0回」という結果になってしまいます。曜日絡みの集計は、だいたいの場合、WEEKDAY関数を使うので問題はないでしょうが、今回はこんな方法もあるよってことで、見た目も、値も「曜日」となるようにします。
使う関数はTEXT関数です。使い方は、

=TEXT( 値 , "表示形式")

となります。
この表示形式というのは、Excelのリボンにある表示形式と同じです。組み込み形式の形をある程度知っていれば、関数側で表示コントロールできるという便利な関数です。例えば、値によって、ちょっとだけ表示を変えちゃうみたいなことを、関数でコントロールしたいなってときなんかにいいんじゃないでしょうか?色は変わらないし、値も文字列になってしまうので使える幅は少ないですけど。。。
ちょっとうろ覚えですが、、、確か、関数使った直後に×1すると数値として扱えるとか、何かで見た気がします、、、、まあ、そんな面倒くさいことでは多分使わないので検証はしませんけど(笑)。ご興味のあるかたは試してみては、、、

はい、それでは、カレンダーの初め、1日の曜日欄に次の式を入れます。

=TEXT(DATE($C$1,$E$1,A3),"aaa")

これで曜日が文字列として表示されます。
これで、SUNIFやCOUNTIFを使う時、曜日そのままで検索できますね!
関係ないですが、私、Excelを使い始めの若かりし頃、曜日表示はこの方法ばっかり使ってました(笑)売上日報に仕込んだり、曜日別売上、人件費を集計したりと、、、結構頻繁に出現しましたね(笑)年と月と日付がバラバラにある場合はこれ便利ですよ!

はい、これでカレンダーの日付表示機能は完成です。このサンプルは、条件付き書式で曜日が土、日のときはグレーに塗りつぶす設定がしてあります。条件付き書式については過去記事「関数で万年カレンダーをつくってみる」を御覧ください。

それでは今回はこれで終了です。
次回は第nX曜日の日付計算をします。この計算は、結局月に1回ぐらいしか使わないかもしれませんが、、、、よかったら見てください。
ここまで読んで頂きありがとうございます。