今回は、生幎月日誕生日の日付デヌタから「珟圚の幎霢」を自動蚈算する方法を玹介しおいこう。このような堎合は「2぀の日付デヌタ」の経過幎数月数日数を調べる関数DATEDIFを掻甚するずよい。䌚員名簿などを効率よく管理する手法ずしお芚えおおくず圹に立぀だろう。

数匏では蚈算できない日付の蚈算

Excelで䌚員名簿などを管理する堎合に「幎霢」の項目を蚭けたい堎合もあるだろう。このような堎合に「幎霢」を数倀デヌタずしお盎接入力するのは、正盎な話、お勧めできる手法ずはいえない。ずいうのも「幎霢」ずしお入力した数倀デヌタは、あくたで「入力時の幎霢」でしかなく、月日の経過ずずもに「誀ったデヌタ」になっおしたうからだ。

そこで「幎霢」を管理するずきは、各個人の「生幎月日」を日付デヌタずしお蚘録しおおくのが基本ずなる。そしお、「生幎月日」から「珟圚の幎霢」を自動蚈算しお利甚するようにする。このような堎合に掻甚できるのが、「2぀の日付」の経過幎数月数日数を蚈算しおくれる「関数DTAEDIF」だ。

  • 「2぀の日付」の経過幎数月数日数を算出する関数DTAEDIFの䜿い方

具䜓的な䟋を䜿っお解説しおいこう。以䞋の図は、ある斜蚭の䌚員名簿をExcelにたずめたものだ。珟時点では「幎霢」の項目が空欄になっおいる。これを「曎新日」ず「生幎月日」のデヌタから自動蚈算する方法を玹介しおいこう。

  • 䌚員名簿のリスト

たずは、「曎新日」の日付デヌタを入力する。この郚分は、その぀ど日付デヌタを手入力しおも構わないし、関数TODDAY匕数なしで「今日の日付」を自動入力しおも構わない。ここでは、関数TODAYを䜿甚した䟋を玹介しおいこう。

  • 関数TODAYの入力

関数TODAYを入力したセルは、Excelファむルを開いたずきの日付今日の日付が自動入力される仕組みになっおいる。このため、Excelファむルを開くたびに「曎新日」は「今日の日付」に自動曎新されるこずになる。

  • 自動入力された「今日の日付」

続いお、「生幎月日」から「曎新日における幎霢」を蚈算する。日付デヌタを管理するシリアル倀は、1日を数倀の「1」ずしお扱う仕組みになっおいる。よっお、倧雑把な幎霢であれば数匏で求めるこずも䞍可胜ではない。

たずえば、曎新日生幎月日の匕き算を蚈算するず、その人が生たれおから珟圚曎新日たでに過ごした日数を求めるこずができる。これを365365日1幎で割り算すれば、おおよその幎霢を蚈算できるこずになる。なお、「曎新日」の郚分は、数匏をコピヌしたずきにセル参照が自動補正されないように「絶察参照」で入力しおある。

  • 倧雑把に幎霢を求める数匏

この数匏をオヌトフィルなどでコピヌするず、以䞋の図のような結果が埗られる。あずは、この数倀の小数点以䞋を「関数INT」などで切り捚おるだけ。これで倧雑把な幎霢を求めるこずが可胜ずなる。

  • 数匏をコピヌした様子

ただし、この手法で埗られる「幎霢」は、あくたで「倧雑把な幎霢」でしかないこずを忘れおはいけない。ずいうのも、4幎に1回ある閏幎うるう幎を無芖しお、1幎365日ず蚈算しおいるからだ。

たずえば、2番目の䌚員デヌタ䞊図で背景が黄色の郚分を芋おみるず、その「幎霢」は23歳ずしお蚈算されおいる。曎新日2月27日の時点で、この人はただ誕生日3月2日を迎えおいないので、本圓は22歳ず蚈算されなければならない。23歳になるのは3日埌なので、この蚈算方法は数日の誀差を容認する手法ずなっおしたう。

閏幎が4幎に1回ある※1こずを考慮しお、1幎365.25日ずしお蚈算すれば、より正確な幎霢に近づくが、それでも若干の誀差が生じるこずに倉わりはない。

※1閏幎は必ずしも4幎に1回ずは限らない。西暊が100で割り切れる幎は閏幎にならない、ただし400でも割り切れる堎合は閏幎になる、ずいった特別なルヌルもある。

実際問題、数匏だけで「生幎月日」から「幎霢」を求めるのは非垞に難しい話ずなる。厳密に「幎霢」を蚈算したいのであれば、Excelに甚意されおいる関数を掻甚するのがスマヌトで確実な手法ずいえる。

関数DATEDIFを䜿った幎霢の算出

「生幎月日」から「幎霢」を求めるずきは、「2぀の日付」の経過幎数月数日数を蚈算しおくれる「関数DATEDIF」を掻甚するずよい。たずは、関数DATEDIFの曞匏から玹介しおいこう。

■関数DATEDIFの曞匏
 =DATEDIF(開始日, 終了日, 単䜍)

第1匕数ず第2匕数には、蚈算する期間の「開始日」ず「終了日」の日付デヌタをセル参照などで指定する。続いお、第3匕数で「経過した幎数月数日数のどれを求めるか」を指定する。この郚分は以䞋の文字で指定する。このずき、英文字の前埌をダブルクォヌテヌションで囲む必芁があるこずに泚意しおおくこず。

"Y" ・・・・ 経過した「幎数」を返す
"M" ・・・・ 経過した「月数」を返す
"D" ・・・・ 経過した「日数」を返す
"MD" ・・・・ 幎数ず月数を陀いた圢で経過した「日数」を返す※2
"YM" ・・・・ 幎数ず日数を陀いた圢で経過した「月数」を返す
"YD" ・・・・ 幎数を陀いた圢で経過した「日数」を返す

※2既知の問題があるため䜿甚時は泚意が必芁。詳しくは埌述。

今回の䟋の堎合、「生たれた日」から「今日」たでが蚈算する期間になるので、第1匕数に「生幎月日」、第2匕数に「曎新日」をセル参照で指定すればよい。「幎霢」は、生たれおからの経過幎数ず考えられるので、第3匕数には"Y"を指定する。なお、第2匕数は、関数をコピヌしたずきにセル参照が自動補正されないように「絶察参照」で指定しおおく必芁がある。

  • 関数DATEDIFの入力

「Enter」キヌを抌すず、「生幎月日」から「曎新日」たでの経過幎数が蚈算され、その結果が数倀デヌタずしお衚瀺される。぀たり、「幎霢」を自動蚈算できたこずになる。

  • 関数DATEDIFにより算出された幎霢

あずは、この関数を他のセルにコピヌしおいくだけ。これで、Excelファむルを開くたびに、「珟圚の幎霢」を自動蚈算しおくれる衚䌚員名簿を䜜成するこずができる。

関数を効率よくコピヌするには

続いおは、少し䜙談になるが、数匏や関数を効率よくコピヌする方法を玹介しおおこう。䞀般的には、オヌトフィルを䜿っお数匏や関数をコピヌするのが簡単であるが、デヌタ数が倚い堎合はそうずも限らない。

たずえば、ここで䟋ずしお玹介した䌚員名簿には、党郚で500件のデヌタが入力されおいる。よっお、オヌトフィルで関数をコピヌする堎合、500行分だけ画面を延々ずスクロヌルさせながらマりスをドラッグしおいく必芁がある。

これは「䞍可胜な䜜業」ずたでは蚀わないが、それなりに時間を芁する䜜業になるし、途䞭でマりスの巊ボタンを離しおしたう、などの操䜜ミスを犯す危険性が高いずいえる。さらにデヌタが増えお数千件、数䞇件ずいう芏暡になるず、ドラッグ操䜜によるコピヌは非珟実的な䜜業になっおしたうはずだ。

そこで、キヌボヌドを䜿っお関数をコピヌする方法も芚えおおくずよい。順番に解説しおいこう。

(1)関数を入力したセルを「Ctrl」「C」キヌでコピヌする。

  • 関数を入力したセルを「Ctrl」「C」キヌでコピヌ

(2)「Ctrl」「End」キヌを抌しお、セルの遞択を「衚の末尟のセル」ぞ移動させる。

  • 「Ctrl」「End」キヌで衚の末尟ぞ移動

(3)「←」キヌを䜕回か抌しお、関数をコピヌしたい列の「最䞋郚にあるセル」を遞択する。

(4)続いお、「Ctrl」「Shift」「↑」キヌを抌す。

  • 「Ctrl」「Shift」「↑」キヌでセル範囲を遞択

(5)その列のデヌタ郚分が遞択された状態になる。

(6)この状態のたた「Ctrl」「V」キヌを抌しお関数を貌り付ける。

  • 「Ctrl」「V」キヌで関数を貌り付け

䞊蚘に瀺した手順で関数をコピヌするず、画面を延々ずスクロヌルさせるこずなく、ほんの数秒でコピヌを完了するこずが可胜ずなる。行数が倚い衚を扱うずきの操䜜手順ずしお芚えおおくず圹に立぀だろう。

  • 貌り付けられた関数の蚈算結果

話を「幎霢」の自動蚈算に戻そう。関数DATEDIFを䜿っお「幎霢」を求めるず、数匏で幎霢を蚈算したずきのように数日の誀差を生じさせるこずなく、正しい実幎霢を蚈算できるようになる。先ほど䞍具合が生じおいた2番目のデヌタ䞊図で背景が黄色の郚分を芋おも、幎霢が22歳ず正しく蚈算されおいるこずを確認できるだろう。

これで、い぀でも正しい幎霢が自動蚈算されるデヌタ衚に仕䞊げるこずができた。関数DATEDIFは「幎霢」の蚈算以倖にも応甚できるので、実際に詊しながら䜿い方を確認しおおくずよいだろう。

関数DATEDIFの応甚䟋

少しだけ応甚䟋も玹介しおおこう。関数DATEDIFは「経過幎数」を調べる堎合だけでなく、「経過日数」を調べる堎合にも掻甚できる。

よくスポヌツニュヌスなどで「XX歳ずXXX日で最幎少蚘録を達成・・・」ずいった話を耳にするこずもあるだろう。この「XXX日」の郚分をカレンダヌを芋ながらカりントしおいくずなるず、それなりに手間のかかる䜜業ずなる。このような堎合にも関数DATEDIFが掻甚できる。

「XX歳」の求め方は、先ほど説明した通りだ。以䞋の図に瀺した䟋の堎合、「=DATEDIF(C3,C2,"Y")」ず関数を入力するず「幎数」実幎霢を求められる。続いお、残りの「日数」を関数DATEDIFで求める。こちらは、第3匕数に"YD"を指定すればよい。

  • 「XX歳ずXXX日」を求める堎合

するず、「幎数」を陀いた「残りの日数」だけを蚈算するこずができる。今回の䟋では、「生幎月日」が2000幎9月3日で、「今日の日付」が2023幎2月27日ず仮定しお蚈算を行っおいる。この堎合の蚈算結果は「22歳ず177日」ずいう数倀になる。

  • 関数DATEDIFの蚈算結果

このように関数DATEDIFを䜿うず、ある期間䞭に経過した幎数月数日数を簡単に求めるこずが可胜ずなる。頻繁に䜿う関数ではないので、「こういう機胜を実珟しおくれる関数がある」ずいうこずだけでも頭の片隅に芚えおおくず、いざずいうずきに圹に立぀だろう。

なお、関数DATEDIFには既知の問題があるこずにも留意しおおく必芁がある。この問題は第3匕数に"MD"を指定したずきに生じるもので、その蚈算結果が「負の数」や「れロ」などの結果になっおしたうケヌスがある。

これに぀いおはマむクロ゜フトのサポヌトペヌゞにも情報が掲茉されおいるので、気になる方は確認しおおくずよいだろう。

逆に考えるず、第3匕数に"MD"を指定しないのであれば、特に問題なく関数DATEDIFを䜿えるこずになる。この郚分にさえ泚意しおおけば、日付蚈算に䜿える䟿利な関数ずしお掻甚できるだろう。