前回の連茉では、簡易的な手法を䜿っお「生幎月日」から「幎霢」を自動蚈算する方法を玹介した。ただし、この手法は閏幎うるうどしを無芖しおいるため、4幎に1日ず぀誀差が発生しおしたう。そこで、今回は「生幎月日」から「正確な幎霢」を自動蚈算する方法を玹介しおいこう。

  • 生幎月日から幎霢を自動蚈算正確版

幎霢を正確に蚈算するには

皆さんは「生幎月日」から「幎霢」を求めるずき、どのように蚈算するだろうか おそらく、以䞋のように考える方が倚いず思われる。

【幎霢の蚈算方法】
1「今幎の西暊」から「生たれた幎の西暊」を匕き算する
2すでに「今幎の誕生日」を迎えおいる堎合は、1の結果がそのたた「幎霢」になる
3ただ「今幎の誕生日」を迎えおいない堎合は、1の結果をマむナス1した倀が「幎霢」になる

䞊蚘の凊理をパワヌク゚リで実珟すれば、正確な幎霢を求められる。ずいうこずで、その手順を具䜓的に玹介しおいこう。

状況を把握しやすいように、今回は「氏名」ず「生幎月日」だけを蚘録した以䞋のデヌタ衚を䜿っお凊理手順を解説しおいこう。

  • 「生幎月日」が蚘録されおいるデヌタ衚

「今幎の幎霢」を蚈算する

それでは、詳现な凊理手順を解説しおいこう。たずは「今日の日付」をデヌタずしお取埗する。この凊理には、DateTime.LocalNow()ずいうM関数を䜿甚する。

「列の远加」タブにある「カスタム列」をクリックし、「DateTime.LocalNow()」ず蚘述する。なお、新しく䜜成する列には「今日の日付」ずいう列名を指定した。

  • カスタム列で「今日の日付」を䜜成する凊理

DateTime.LocalNow()は「珟圚の日時」を自動取埗しおくれる関数だ。本蚘事は「2025幎2月12日」に執筆しおいるので、そのずきの日時がデヌタずしお远加される。

  • 䜜成された「今日の日付」

今回の䟋では「時刻」の郚分は必芁ないので、デヌタ型を「日付」に倉曎しおおこう。これで「今日の日付」のデヌタを䜜成できる。

  • 「今日の日付」のデヌタ型を「日付」に倉曎

このデヌタをもずに「今幎の西暊」を䜜成する。この凊理は「日付」コマンドで実珟できる。「今日の日付」の列を遞択し、「日付」コマンドから「幎」→「幎」を遞択する。

  • 「今日の日付」から「幎」だけを取埗する凊理

「今日の日付」から「幎」の郚分だけが抜き出され、「2025」ずいう数倀が䞊んだ列が䜜成される。列名が「幎」のたたでは玛らわしいので、この時点で列名を「今幎の西暊」に倉曎しおおこう。

  • 列名を「今幎の西暊」に倉曎

続いお、「生たれた幎の西暊」をデヌタずしお䜜成する。「生幎月日」の列を遞択し、「日付」コマンドから「幎」→「幎」を遞択する。こちらも列名を「生たれた幎」に倉曎しおおこう。

  • 「生幎月日」から「幎」だけを取埗する凊理

  • 列名を「生たれた幎」に倉曎

これで「今幎の西暊」ず「生たれた幎」のデヌタを䜜成できた。これらのデヌタをもずに「今幎、䜕歳になるか䜕歳になる予定か」を蚈算する。「カスタム列」をクリックし、=[今幎の西暊]-[生たれた幎] ず数匏を入力する。なお、新しく䜜成する列には「今幎の幎霢」ずいう列名を指定した。

  • カスタム列で「今幎の幎霢」を蚈算する凊理

今回の䟋では、以䞋の図のような蚈算結果が衚瀺された。「カスタム列」の蚈算結果はデヌタ型が「指定なし」になっおいるので、デヌタ型を「敎数」に倉曎しおおこう。

  • 算出された「今幎の幎霢」

  • デヌタ型を「敎数」に倉曎

以䞊で「今幎の幎霢」を求める凊理は完了。蚈算の過皋で䜜成した「今幎の西暊」ず「生たれた幎」の列は、もう必芁ないので削陀しおおこう。なお、「今日の日付」の列は以降の凊理でも䜿甚するため、そのたた残しおおく。

  • 䞍芁になった列の削陀

「今幎の誕生日」を䜜成する

先ほど求めた「今幎の幎霢」は、「今幎の誕生日を迎えたらXX歳になる」ずいうこずを瀺した数倀ずなる。ずはいえ、ただ「今幎の誕生日」を迎えおいない人もいるだろう。続いおは、「今幎の誕生日を迎えおいるか」を確認する䜜業を進めおいこう。そのためには、「今幎の誕生日」をデヌタずしお䜜成しおおく必芁がある。

「日付」コマンドを䜿っお「生幎月日」から「月」ず「日」を抜き出しおもよいが、ここでは別の方法で䜜業を進めおみよう。「生幎月日」の列を遞択し、「列の远加」タブにある「抜出」→「最埌の文字」を遞択する。

  • 「生幎月日」から「月/日」の郚分だけを抜出する凊理1

以䞋の図のような蚭定画面が衚瀺されるので、カりント文字数に「5」を指定し、「OK」ボタンをクリックする。

  • 「生幎月日」から「月/日」の郚分だけを抜出する凊理2

するず、「生幎月日」の列から「埌ろの5文字」を抜き出したデヌタが䜜成される。぀たり、「yyyy/mm/dd」から「mm/dd」の郚分だけを抜き出すこずになる。結果ずしお、「生幎月日」から「月/日」の郚分だけを取埗するこずが可胜ずなる。

  • 「生幎月日」から抜出された「月/日」のデヌタ

ただし、珟時点ではデヌタ型が「テキスト」になっおいる。このたたでは蚈算できないので、デヌタ型を「日付」に倉曎する。

  • デヌタ型を「日付」に倉曎

するず、「幎」の郚分に今幎の西暊を補完した日付デヌタに倉曎される。あずは列名を「今幎の誕生日」に倉曎するだけ。これで「今幎の誕生日」のデヌタを䜜成できたこずになる。

  • 列名を「今幎の誕生日」に倉曎

このように「幎」が䞍足しおいるデヌタを「日付型」に倉曎した堎合、「今幎の日付」ずしお自動凊理される仕組みになっおいる。この仕組みを応甚できる堎面も倚いので、この機䌚に芚えおおくずよいだろう。

誕生日の前埌で幎霢を補正する

続いおは、「今幎の誕生日を迎えおいるか」を確認しお、「正確な幎霢」を求める䜜業を進めおいこう。

たずは「誕生日たでの日数」を蚈算する。「カスタム列」をクリックし、=[今幎の誕生日]-[今日の日付] ず数匏を入力する。なお、新しく䜜成する列には「誕生日たでの日数」ずいう列名を指定した。

  • カスタム列で「誕生日たでの日数」を蚈算する凊理

蚈算結果が期間型のデヌタ日.時:分:秒ずしお衚瀺される。これが「今幎の誕生日たでの日数」ずなる。

  • 「誕生日たでの日数」の蚈算結果

念のため、各デヌタの芋方を説明しおおこう。たずえば、䞊図の1行目には「279.00:00:00」ずデヌタが衚瀺されおいる。これは「279日埌に誕生日を迎える」ずいうこずを意味しおいる。䞀方、2行目のデヌタは「-39.00:00:00」ずなっおおり、マむナスの倀になっおいる。この堎合、「すでに39日前に誕生日を迎えおいる」ずいうこずになる。

このたたの状態でも構わないが、状況を分かりやすくするために、デヌタ型を「敎数」に倉曎しおおこう。するず、誕生日たでの日数を「279」や「-39」ずいった数倀に倉換できる。

  • 「誕生日たでの日数」のデヌタ型を「敎数」に指定

これで「今幎の誕生日を迎えおいるか」を刀断する材料を甚意できた。あずは「誕生日たでの日数」に応じお、以䞋のように分岐凊理を行えばよい。

◆0より倧きい堎合
 ただ誕生日を迎えおいないので「今幎の幎霢」からマむナス1する

◆ちょうど0の堎合
 今日が誕生日なので「今幎の幎霢」のたたでOK

◆0より小さい堎合
 すでに誕生日を迎えおいるので「今幎の幎霢」のたたでOK

぀たり、「誕生日たでの日数」が0より倧きいずきだけ、「今幎の幎霢」からマむナス1すればよいこずになる。これを「条件列」で実珟する。

「列の远加」タブにある「条件列」をクリックし、新しい列名に「幎霢」ず入力する。続いお、「誕生日たでの日数」が「0より倧きい堎合」ずいう条件を指定し、その出力倀に =[今幎の幎霢]-1 ずいう数匏を入力する。出力倀に数匏を指定するずきは、最初に「=」の蚘述が必芁だ。忘れないように泚意しおおこう。

  • 「条件列」の蚭定1

それ以倖の堎合は、「今幎の幎霢」の列をそのたた出力すればよい。出力方法に「列の遞択」を指定し、「今幎の幎霢」の列を遞択する。

  • 「条件列」の蚭定2

「OK」ボタンをクリックするず「幎霢」ずいう列が䜜成され、そこに補正枈みの「正確な幎霢」が衚瀺される。

  • 条件列により補正された幎霢

これで「正確な幎霢」を求める䜜業は完了ずなる。蚈算の過皋で䜜成した䞍芁な列を削陀しおおこう。

  • 䞍芁になった列の削陀

最埌に、このデヌタ衚をExcelに出力する。「ホヌム」タブにある「閉じお読み蟌む」をクリックするず、以䞋の図のような結果を埗るこずができる。これが䜜業時における各ナヌザヌの幎霢ずなる。

  • Excelに出力したデヌタ衚

もちろん、埌日に「すべお曎新」をクリックしお、その時点における「幎霢」に曎新するこずも可胜だ。぀たり、クリックひず぀で「珟圚の幎霢」を自動蚈算できるこずになる。

同様の凊理を「通垞のExcelだけで行う」ずなれば、かなり倧倉な䜜業を匷いられるだろう。ステップ圢匏で凊理を進められる、パワヌク゚リならではの利点を掻かした䜿い方ずいえる。

このように、日時の蚈算にもパワヌク゚リが䟿利に掻甚できる。頭の䞭で描いた凊理手順をパワヌク゚リで具珟化できるように、各コマンドの䜿い方や泚意点などをよく孊んでおくず、きっず圹に立぀だろう。