【エクセルでカレンダー作成】日付と曜日を表現する関数をマスターしよう

みなさん、こんにちはケンケンです。

 

エクセルでカレンダーを作ることを最終目標にしています。

前回は、カレンダー作りに必要な関数として、

YEAR関数、MONTH関数、DAY関数をテクニックとともに紹介しました。

 

今回は、引き続き上記以外の関数を紹介していきます。

 

TODAY・NOW・DATE関数

TODAY・NOW・DATE関数ですが、これは日付を表す関数の超基本です。

ここでちゃんと使えるようにしておきましょう。

 

TODAY関数

 

書式は

TODAY()

引数は必要ありません。現在時刻の日付のシリアル値を返します。

 

書式は非常に簡単ですが、肝は日付そのものを返すのでなく、シリアル値を返すことです。

シリアル値が分からない方は、前回の復習をしてください。

 

このシリアル値を使っていろいろ加工することも可能ですね。

例えば、今日と比べて常に7日後の日付を把握しておきたい時は、以下のようにします。

 

まずA1セルに「=TODAY()」と入力し、現在の日付を表示させます。

さらに、B1セルに「=A1+7」と入力すると7日後の日付が表示されます。

 

エクセルは、7/30の7日後が8/6だと知っていて日付を返したのではありません。

それぞれのシリアル値を返し、その値を人間の目に日付として見えるように変換してくれている、と考えてください。

実態としては、以下のように計算しているのです。

NOW関数

現在の日付時刻を表示するNOW関数です。

 

書式は、

NOW()

引数はありません。

 

シンプルな関数ですが、ここでひとつ付け加えておきますと、時刻もシリアル値で管理しています。

 

24時を1として時刻を表します。

例えば、0.5なら12時ですし、0.75なら18時を表します。

試しに以下のように数式を入力してみてください。

 

「+0.25」すると現在時刻の6時間後を計算して返してくれます。

この概念を知っていると役に立つときが来ると思いますよ。

 

DATE関数

引数に入力された数値をシリアル値(日付)に変換します。

書式は、

DATE(年, 月, 日)

年には1~4桁の数値を入れます。

月には1~12までの数値を入れます。

日には1~31までの数値を入れます。

 

使い方は以下の通りです。

当然、結果として返された「2020/7/24」はシリアル値で「44036」を表します

関数の使い方は分かりましたが、これだけでは何のための関数なのか分かりづらいですね。

なので、実務でありそうな以下の例で見てみましょう。

 

 

入社日一覧を年、月、日で分けて入力しているとします。実務ではけっこうある管理方法です。

例えば、180日後に有給付与日を設定したいとします。その場合、年月日が分かれていると使いづらいので、

  1. DATE関数でシリアル値に変換
  2. そのシリアル値に180プラスする

以上のようにするとうまくいきそうです。

 

具体的には以下のように数式を入力します。

どうですか。

これで分けれていた年月日を統一して180日後の計算をすることができました。

 

もちろん、この結果算出された日付はシリアル値なので、YEAR・MONTH・DAY関数で年月日に再度分けることもできます。

組み合わせるといろいろ出来るので試してみてください。

 

曜日を表現する関数

カレンダーを作るにあたって曜日の表示は大事ですね。

エクセル関数で曜日を算出する方法は何種類かありますのでそれを紹介します。

 

TEXT関数で表示形式を変える

TEXT関数は便利なもので、日付データから曜日を抜き出して表示してくれます。

以下のように数式を入力するだけです。

「”aaa”」などの表示方法はセルの書式設定でおなじみですね。

簡単に曜日を抜き出せるのでTEXT関数は優秀ですね。

 

WEEKDAY関数

もう一つ、WEEKDAY関数も紹介します。

 

書式は、

WEEKDAY(シリアル値,種類)

シリアル値に日付を入力し、種類を選びます。

すると、曜日を日付に対応させて結果を数字で返してくれます。

種類は、曜日の始まりを指定するものなので特に意識しなくてOKです。

省略できるので今回は引数も説明も省略します。

 

言葉だけでは分かりづらいので下図で説明します。

C1セルに「=WEEKDAY(A1)」と入力すると「6」という数字が返ってきました。

B列を見ると金曜日を表す数値のようです。

数式をコピーして一週間の推移をみると日曜日を「1」として月火水木金と数字が加算され、土曜日の「7」が最終値になるみたいです。

これで、曜日を数字で表現することができました。

 

それでは、この性質を使って、毎週月曜日を会議の日として設定してみましょう。IF関数を使います。

 

月曜日の時、とは数字が「2」のときですね。上図の結果を見ても月曜の「2」の時だけ「会議あり」となりました。

 

WEEKDAYNAME関数

VBAにはWEEKDAYNAME関数が用意されていて、WEEKDAYで算出した数値を曜日の表示形式で返してくれます。

VBAが出来る方は以下のコードを試してみてください。

Sub hiduke()
    Dim i
    For i = 1 To 7
        Range("E" & i).Value = WeekdayName(Weekday(Range("A" & i).Value))
    Next
End Sub

 

実行すると以下のように曜日を書き出せます。

VBAに関してはおいおい紹介していきますので、今回は細かいコードの説明は割愛します。

 

まとめ

いかがでしたか。

今回は日付・時刻・曜日に関する関数を学びました。

日常的に良く使う関数で、シリアル値を理解していると応用も効くところなので覚えてしまいましょう。

 

今回までに紹介した関数一覧は以下に掲示しておくので復習に役立ててください。

次回からは、実際にカレンダーを作っていきますのでお楽しみに。

それではまたお会いしましょう。

 

カレンダーアプリ作成記事一覧

【エクセルでカレンダー作成】シリアル値の概念を知り日付関数の基礎をマスター

【エクセルでカレンダー作成】日付と曜日を表現する関数をマスターしよう

【エクセルでカレンダー作成】作業列を設けてカレンダー作りにとりかかる

【エクセルでカレンダー作成】VLOOKUP関数と条件付き書式でカレンダーを作りこむ

【エクセルVBA】VBAでカレンダーを作るときに最も重要な関数

【エクセルVBAでカレンダー作り】DoLoopとDateAdd関数を使って日付を書き出す方法

【エクセルVBAでカレンダー作り】OFFSETとVLOOKUPを使って検索抽出する方法

【エクセルVBA】別シートからカレンダーに行事を転記する方法

【エクセルVBA】カレンダーの土日だけ色を変える方法とRangeオブジェクトの応用的な使い方

【エクセルVBA】プロシージャをまとめてカレンダーを完成させよう