前回の連載では、「生年月日」から「誕生月」だけを取り出す方法を紹介した。今回は、似たような事例として、「生年月日」から「誕生日」(X月X日)を取り出す方法を紹介していこう。この方法は色々と考えられるが、日付データを作成する関数DATEを使うのが最も効率的だ。あわせて関数TIMEの使い方も覚えておくと役に立つだろう。
数値から日付データを作成する関数DATE
前回の連載では、YEAR、MONTH、DAYといった関数を使って「日付データ」から年、月、日の「数値データ」を取り出す方法を紹介した。これとは逆に、年、月、日の「数値データ」から「日付データ」を作成する関数DATEも用意されている。「時刻データ」を作成する関数TIMEとあわせて、使い方を学んでおくとよいだろう。
まずは、簡単な例を使って「関数DATE」の使い方を紹介していこう。以下の図は、ある部署における「書籍・研修費の残高」の推移をまとめたものだ。この会社では、自由に使える書籍・研修費として、各部署に毎月3万円を支給する制度が用意されている。
この表のように「月」と「日」を別々の列に分けて、日付を“単なる数値”として扱っているケースもよく見受けられる。昔ながらの帳簿や見積書、請求書などに倣った形式といえるが、日付順に並べ替えたり、期間で絞り込んだりするには、少し不便なデータ形式であると考えられる。
このような場合に「関数DATE」を活用すると、「月」と「日」の数値から「日付データ」(シリアル値)を作成することが可能となる。
関数DATEの入力に必要な引数は3つで、年(西暦)、月(1~12)、日(1~31)を順番に数値で指定すればよい。
■関数DATEの書式
=DATE(年, 月, 日)
具体的な例を示しながら紹介していこう。まずは、関数の入力用に「日付」の列を挿入する。
続いて、関数DATEを入力する。この表は2023年の入金/出金の記録をまとめたものなので、第1引数(年)には2023を指定する。あとは、第2引数(月)にB3セルの参照、第3引数(日)にC3セルの参照、という具合に関数を入力していけばよい。
「Enter」キーを押して関数の入力を確定すると、1(月)と1(日)の数値データをもとに「2023/1/1」という日付データ(シリアル値)を作成できる。
あとは、この関数をオートフィルでコピーするだけ。これで全データの「月」と「日」を「日付データ」に変換することが可能となる。
日付の表示がガタガタして見にくい場合は、表示形式にyyyy/mm/ddなどを指定してあげるとよい。年/月/日の桁数が統一され、日付を見やすく表示できる。
このように、年、月、日の「数値データ」をもとに「日付データ」(シリアル値)を作成するのが「関数DATE」の基本的な役割となる。
「生年月日」から「誕生日」だけを取り出すには?
続いては、もう少し実践的な例を紹介していこう。以下の図は、ある施設の会員名簿をExcelファイルにまとめたものだ。
このデータをもとに、明日、誕生日を迎える方に「おめでとうメール」を送信したいとしよう。この表には「生年月日」の項目が用意されているため、「明日、誕生日を迎える人」を調べるのは不可能な話ではない。
ただし、何百件もあるデータの中から「明日、誕生日を迎える人」を1件ずつ自分の目で確認していくのは大変な作業になるはずだ。「生年月日」の列を基準に表を並べ替えても、「生まれた年」を優先した並び順になるだけで効率のよい作業は望めない。
このような場合は、関数DATEを使って「今年の誕生日」を求めるとスムーズに作業を進められる。表に「今年の誕生日」という列を挿入し、以下の図のように関数DATEを入力する。
念のため、簡単に補足しておこう。関数DATEの第1引数には、今年の西暦である2023を指定する。続いて、関数MONTHで「生年月日」から「生まれた月」を数値として取り出し、これを関数DATEの第2引数に指定する。同様に、関数DAYで「生年月日」から「生まれた日」を数値として取り出し、これを第3引数に指定する。
このように処理すると、「生年月日」の「月/日」を維持したまま、「年」だけを今年の数値(2023)に置き換えることができる。
続いて、この関数を他のセルにコピーする。このとき、第15回の連載で紹介したショートカットキーを活用すれば、ほんの数秒で関数DATEのコピーを完了できるはずだ。
これで全員の「今年の誕生日」を求めることができた。あとは「今年の誕生日」を基準に表を並べ替えるだけ。これで「誕生日」の順番に会員データを表示できる。
明日、誕生日を迎える方に「おめでとうメール」を送信するときは、該当する日付の部分まで画面をスクロールしていけばよい。たとえば、今日が3月13日であった場合は、「今年の誕生日」が2023/3/14になる部分まで画面を下へスクロールする。
あとはメールアドレスをコピーして「おめでとうメール」を送信するだけだ。これでタスク完了となる。
数値から時刻データを作成する関数TIME
Excelには、DATEによく似た関数として、TIMEという関数も用意されている。こちらは、時、分、秒の数値データをもとに「時刻データ」のシリアル値を作成する関数となる。
■関数TIMEの書式
=TIME(時, 分, 秒)
関数TIMEも引数の数は3つで、いずれも省略不可という仕様になっている。このため、「秒」を指定しない場合であっても、第3引数に0(ゼロ)を入力しなければならない。
簡単な例を紹介しておこう。以下の図は、「時」と「分」の数値データから「時刻データ」を作成した例だ。「秒」は特に指定しないので、第3引数には0を入力している。
「Enter」キーを押すと、セルの表示形式に従った形で「時刻データ」が表示される。
補足説明として、引数に範囲外の数値を指定した例も紹介しておこう。たとえば、第2引数(分)に70を指定すると、その値は1時間10分として処理される仕組みになっている。つまり、9時70分=10時10分という考え方になる。
なお、このような挙動は、日付データを作成する関数DATEにも共通するものとなる。たとえば、第2引数(月)に1、第3引数(日)に32を指定すると、1月32日ではなく、2月1日の日付データが作成される。
第1引数(年)は少し複雑で、1900未満の数値を指定すると、指定した数値に1900を足した値が「年」として設定される。たとえば、「年」に80を指定すると、1980年の日付データが作成される。
関数DATEと関数TIMEを組み合わせて、「日時データ」を作成することも可能だ。この場合は、それぞれの関数を「+」で足し算すればよい。
シリアル値は、整数部分で「日付」、小数点以下で「時刻」を示す仕様になっている。このことを把握していれば、上記の仕組みを容易に理解できるだろう。
今回の連載で紹介した関数DATEや関数TIMEは、「日付」や「時刻」を扱うときによく利用される関数のひとつとなる。現時点では用途が特に見つからなくても、「こういった関数がある」ということを覚えておくと、いずれ役に立つだろう。