前回の連載では、「生年月日」から「誕生月」だけを取り出す方法を紹介した。今回は、似たような事例として、「生年月日」から「誕生日」(X月X日)を取り出す方法を紹介していこう。この方法は色々と考えられるが、日付データを作成する関数DATEを使うのが最も効率的だ。あわせて関数TIMEの使い方も覚えておくと役に立つだろう。

数値から日付データを作成する関数DATE

前回の連載では、YEAR、MONTH、DAYといった関数を使って「日付データ」から年、月、日の「数値データ」を取り出す方法を紹介した。これとは逆に、年、月、日の「数値データ」から「日付データ」を作成する関数DATEも用意されている。「時刻データ」を作成する関数TIMEとあわせて、使い方を学んでおくとよいだろう。

  • 指定した日付、時刻をシリアル値に変換する関数DATE、TIME

まずは、簡単な例を使って「関数DATE」の使い方を紹介していこう。以下の図は、ある部署における「書籍・研修費の残高」の推移をまとめたものだ。この会社では、自由に使える書籍・研修費として、各部署に毎月3万円を支給する制度が用意されている。

  • 書籍・研修費の残高をまとめた表

この表のように「月」と「日」を別々の列に分けて、日付を“単なる数値”として扱っているケースもよく見受けられる。昔ながらの帳簿や見積書、請求書などに倣った形式といえるが、日付順に並べ替えたり、期間で絞り込んだりするには、少し不便なデータ形式であると考えられる。

このような場合に「関数DATE」を活用すると、「月」と「日」の数値から「日付データ」(シリアル値)を作成することが可能となる。

関数DATEの入力に必要な引数は3つで、年(西暦)、月(1~12)、日(1~31)を順番に数値で指定すればよい。

■関数DATEの書式
 =DATE(年, 月, 日)

具体的な例を示しながら紹介していこう。まずは、関数の入力用に「日付」の列を挿入する。

  • 「日付」の列を挿入

続いて、関数DATEを入力する。この表は2023年の入金/出金の記録をまとめたものなので、第1引数(年)には2023を指定する。あとは、第2引数(月)にB3セルの参照、第3引数(日)にC3セルの参照、という具合に関数を入力していけばよい。

  • 関数DATEの入力

「Enter」キーを押して関数の入力を確定すると、1(月)と1(日)の数値データをもとに「2023/1/1」という日付データ(シリアル値)を作成できる。

  • 作成された日付データ(シリアル値)

あとは、この関数をオートフィルでコピーするだけ。これで全データの「月」と「日」を「日付データ」に変換することが可能となる。

  • 関数DATEをオートフィルでコピー

日付の表示がガタガタして見にくい場合は、表示形式にyyyy/mm/ddなどを指定してあげるとよい。年/月/日の桁数が統一され、日付を見やすく表示できる。

  • 表示形式にyyyy/mm/ddを指定

このように、年、月、日の「数値データ」をもとに「日付データ」(シリアル値)を作成するのが「関数DATE」の基本的な役割となる。

「生年月日」から「誕生日」だけを取り出すには?

続いては、もう少し実践的な例を紹介していこう。以下の図は、ある施設の会員名簿をExcelファイルにまとめたものだ。

  • 会員名簿のリスト

このデータをもとに、明日、誕生日を迎える方に「おめでとうメール」を送信したいとしよう。この表には「生年月日」の項目が用意されているため、「明日、誕生日を迎える人」を調べるのは不可能な話ではない。

ただし、何百件もあるデータの中から「明日、誕生日を迎える人」を1件ずつ自分の目で確認していくのは大変な作業になるはずだ。「生年月日」の列を基準に表を並べ替えても、「生まれた年」を優先した並び順になるだけで効率のよい作業は望めない。

  • 「生年月日」の昇順に並べ替えた場合

このような場合は、関数DATEを使って「今年の誕生日」を求めるとスムーズに作業を進められる。表に「今年の誕生日」という列を挿入し、以下の図のように関数DATEを入力する。

  • 関数DATEの入力

念のため、簡単に補足しておこう。関数DATEの第1引数には、今年の西暦である2023を指定する。続いて、関数MONTHで「生年月日」から「生まれた月」を数値として取り出し、これを関数DATEの第2引数に指定する。同様に、関数DAYで「生年月日」から「生まれた日」を数値として取り出し、これを第3引数に指定する。

このように処理すると、「生年月日」の「月/日」を維持したまま、「年」だけを今年の数値(2023)に置き換えることができる。

  • 「今年の日付」に変換した「生年月日」(今年の誕生日)

続いて、この関数を他のセルにコピーする。このとき、第15回の連載で紹介したショートカットキーを活用すれば、ほんの数秒で関数DATEのコピーを完了できるはずだ。

  • 関数DATEをコピーした様子

これで全員の「今年の誕生日」を求めることができた。あとは「今年の誕生日」を基準に表を並べ替えるだけ。これで「誕生日」の順番に会員データを表示できる。

  • 「今年の誕生日」の昇順で並べ替え

明日、誕生日を迎える方に「おめでとうメール」を送信するときは、該当する日付の部分まで画面をスクロールしていけばよい。たとえば、今日が3月13日であった場合は、「今年の誕生日」が2023/3/14になる部分まで画面を下へスクロールする。

  • 「今年の誕生日」が3月14日の会員

あとはメールアドレスをコピーして「おめでとうメール」を送信するだけだ。これでタスク完了となる。

数値から時刻データを作成する関数TIME

Excelには、DATEによく似た関数として、TIMEという関数も用意されている。こちらは、時、分、秒の数値データをもとに「時刻データ」のシリアル値を作成する関数となる。

■関数TIMEの書式
 =TIME(時, 分, 秒)

関数TIMEも引数の数は3つで、いずれも省略不可という仕様になっている。このため、「秒」を指定しない場合であっても、第3引数に0(ゼロ)を入力しなければならない。

簡単な例を紹介しておこう。以下の図は、「時」と「分」の数値データから「時刻データ」を作成した例だ。「秒」は特に指定しないので、第3引数には0を入力している。

  • 関数TIMEの入力

「Enter」キーを押すと、セルの表示形式に従った形で「時刻データ」が表示される。

  • 作成された時刻データ

補足説明として、引数に範囲外の数値を指定した例も紹介しておこう。たとえば、第2引数(分)に70を指定すると、その値は1時間10分として処理される仕組みになっている。つまり、9時70分=10時10分という考え方になる。

  • 第2引数(分)に60以上の数値を指定した場合

なお、このような挙動は、日付データを作成する関数DATEにも共通するものとなる。たとえば、第2引数(月)に1、第3引数(日)に32を指定すると、1月32日ではなく、2月1日の日付データが作成される。

第1引数(年)は少し複雑で、1900未満の数値を指定すると、指定した数値に1900を足した値が「年」として設定される。たとえば、「年」に80を指定すると、1980年の日付データが作成される。

関数DATEと関数TIMEを組み合わせて、「日時データ」を作成することも可能だ。この場合は、それぞれの関数を「+」で足し算すればよい。

  • 「日付」と「時刻」の足し算

  • 作成された日時データ

シリアル値は、整数部分で「日付」、小数点以下で「時刻」を示す仕様になっている。このことを把握していれば、上記の仕組みを容易に理解できるだろう。

今回の連載で紹介した関数DATEや関数TIMEは、「日付」や「時刻」を扱うときによく利用される関数のひとつとなる。現時点では用途が特に見つからなくても、「こういった関数がある」ということを覚えておくと、いずれ役に立つだろう。