みなさん、こんにちはケンケンです。
エクセルでカレンダー作りをしています。
最終的にはVBAでカレンダーを完成させます。
今回から実際にカレンダー作りにとりかかります。前回まで紹介した関数を作うので、関数があやふやで自信がない方は、復習しておいてください。
さらに、前回までに出てこなかったけど頻出する関数も紹介していきます。カレンダー作りを通してたくさんの関数を学べるように工夫していますので、是非ご覧ください。
完成形を見てみよう
まずは、完成形をお見せします。
よく見かける縦長のカレンダーですが、以下のようにいくつか仕掛けを作りたいと思います。
- 作りたいカレンダーの年と月を入力すると、連動してカレンダーが作成される
- 「主な行事」欄に自動的に行事が表示される
- 土日は色分けされる
仕掛けを作るとといっても難しいことはないので、ひとつひとつ解決していきましょう。
まずは、仕掛けを作るための仕掛けを作っていきます。
作りたいカレンダーの年と月を入力すると、連動してカレンダーが作成される
どの資料を作るときにも注意すべき共通事項は、同じ作業はできるだけ避ける、です。
では、今回避けるべき作業は何でしょうか。
そうです。日付と曜日を毎回入力することです。
作成したい月のカレンダーをすぐに作れるといいですね。
そこで、カレンダー上部の年と月に該当年月を入力すると、日付と曜日が連動してカレンダーが作られる仕組みを作ります。
作業列を作ろう
関数を使う際は、作業列を作ることをおすすめします。
ひとつのセルでネストさせて一気に目的にたどり着くことも可能ですが、他人が見た時に理解してもらいない可能性が高くなってしまうので、作業列を設け、処理を分けて単純化することで、分かり易くさせます。
今回、作業列は3つ用意します。
A列・・・1~31の数字を用意します。ひと月の最大日数分の行を用意する、と言い換えられます。
B列・・・DATE関数を使って「年月日」を表示される
C列・・・MONTH関数を使ってB列の「月」を表示される
作業列A列(日数表示用)
とくに説明する必要はないですね。
単純に1~31まで数字を入力してください。
セルはA3からA33までを使っています。
作業列B列(日付表示用)
DATE関数を使って「年月日」を表示させます。
B3セルに
=DATE($F$1,$H$1,A3)
と入力します。入力出来たら数式をカレンダーの最終行までコピーしましょう。
DATE関数の引数、F1とH1は絶対参照にしましょう。
絶対参照が分からない方はこちらで復習してください。
作業列C列(B列から月を抜き出す)
MONTH関数でB列の日付から「月」を抽出します。
C3セルに
=MONTH(B3)
と入力し、数式をC33までコピーしましょう。
ここまで出来たらカレンダー上部の年と月を変更してみてください。
連動して、B列とC列が該当月に変更できていれば成功です。
日付列(D列)を完成させよう
作業列の次は実際に表示させてユーザーに見せる部分を作ります。
日付列のD3セルに、
=DATE($F$1,$H$1,A3)
と入力しD33までコピーします。作業列B列と同じ関数です。
次に表示形式を変更します。
セルの書式設定からユーザー定義を選択し、種類を「d」とします(下記参照)
このようにすると、年月日の内、「日」に該当する部分が1から31の間で表示されます。
曜日列(E列)を完成させよう
今度は、曜日を表示させてみましょう。
TEXT関数を使います。
E3セルに
=TEXT(D3,”aaa”)
と入力し、D33までコピーしましょう。
上図のように曜日が表示されていればOKです。
常に31日とは限らない
今までは、毎月の日数を意識せずに数式を作ってきました。
31日あることを前提に作ってきましたが、30日の月もあるし、2月は28日のときと29日のときがありますね。
それに対応する方法をご紹介します。
まず、現状のまま2020年2月を表示させてみましょう。
3月分まで表示されてしまいました。
このままでも問題ないかもしれませんが、気持ち悪いです。
2月分だけ表示できるように修正してみましょう。
実は、このために作業列を作っておいたのです。
具体的な考え方は、
C列にMONTH関数で書き出された月が、作りたい月(H1セル)の値と違っていた場合にD列を空欄にすれば良さそうです。
D3セルの数式「=DATE($F$1,$H$1,A3)」をIF関数を使って以下のように修正します。
=IF(C3=$H$1,DATE($F$1,$H$1,A3),””)
C3セルの値とH1セルの値が同じだったら日付を表示させ、違ったら空欄にする、という意味です。
この数式をD33までコピーします。
すると、2月分のみを表示させることができました。
ここまで出来たらA~C列を非表示にします。すると見せたい部分だけを表示でき、すっきりしたカレンダーに見えますね。
まとめ
いかがでしたか。
前回まで紹介した関数を使って、カレンダーの基礎部分を作りました。
次回はもっと作りこんでいきます。
具体的には、VLOOKUP関数を使って年間行事を表示できるようにしたり、土日だけ色を変えたりしますのでお楽しみに。
では、また次回お会いしましょう。
カレンダーアプリ作成記事一覧
【エクセルでカレンダー作成】シリアル値の概念を知り日付関数の基礎をマスター
【エクセルでカレンダー作成】日付と曜日を表現する関数をマスターしよう
【エクセルでカレンダー作成】作業列を設けてカレンダー作りにとりかかる
【エクセルでカレンダー作成】VLOOKUP関数と条件付き書式でカレンダーを作りこむ
【エクセルVBA】VBAでカレンダーを作るときに最も重要な関数
【エクセルVBAでカレンダー作り】DoLoopとDateAdd関数を使って日付を書き出す方法
【エクセルVBAでカレンダー作り】OFFSETとVLOOKUPを使って検索抽出する方法
【エクセルVBA】別シートからカレンダーに行事を転記する方法
【エクセルVBA】カレンダーの土日だけ色を変える方法とRangeオブジェクトの応用的な使い方
【エクセルVBA】プロシージャをまとめてカレンダーを完成させよう