【VBAリファレンス|実務向け】実務で必須!DATEDIF関数を使った正確な年齢計算の極意

スポンサーリンク

導入

実務において、顧客リストや社員名簿を作成する際、生年月日から現在の年齢を算出するケースは非常に多いです。しかし、単純に「現在の年」から「生まれた年」を引くだけでは、誕生日を迎えていない人の年齢が1歳多くなってしまうというミスが頻発します。この問題を解決し、正確な満年齢を自動算出するために欠かせないのが「DATEDIF関数」です。今回は、この関数の正しい使い方と、VBAで応用するための基礎知識を解説します。

基礎知識

DATEDIF関数は、2つの日付の間の期間を、指定した単位(年・月・日)で計算する関数です。Excelの関数一覧には表示されない「隠し関数」ですが、非常に安定しており、実務で広く活用されています。

【書式】
DATEDIF(開始日, 終了日, 単位)

ここで重要なのは「単位」の指定です。年齢を求める場合は、期間内の満年数を表す「”Y”」を使用します。この関数を使うことで、閏年や月ごとの日数の違いをExcelが自動的に計算してくれるため、手動計算のようなヒューマンエラーを防ぐことができます。

実装/解決策

最も標準的な使い方は、セルに以下の数式を入力することです。
A1セルに生年月日、B1セルに「=TODAY()」と入力されている場合、C1セルに以下の数式を入力します。

=DATEDIF(A1, TODAY(), “Y”)

これにより、ファイルを開くたびにTODAY関数が現在の日付を更新するため、常に最新の満年齢が表示されます。

サンプルプログラム

業務の自動化を進める際、VBAでこのロジックを実装したい場合もあります。以下のコードは、指定したセルの生年月日を読み取り、アクティブセルに年齢を出力するVBAマクロです。

Sub CalculateAge()
‘ 変数の宣言
Dim birthDate As Date
Dim age As Integer

‘ セルA1から生年月日を取得
birthDate = Range(“A1”).Value

‘ VBAではDateDiff関数を使用するが、満年齢を正確に出すために
‘ DATEDIFのロジックと同様の考え方を適用する
age = DateDiff(“yyyy”, birthDate, Date)

‘ 誕生日を迎えていない場合は1歳引く(満年齢の判定)
If Date < DateSerial(Year(Date), Month(birthDate), Day(birthDate)) Then age = age - 1 End If ' アクティブセルに結果を表示 ActiveCell.Value = age MsgBox "現在の満年齢は " & age & " 歳です。", vbInformation End Sub

応用・注意点

1. 単位の記述ミスに注意
単位の引数(”Y”, “M”, “D”など)は、必ずダブルクォーテーションで囲んでください。これを忘れるとエラーになります。
2. データ型の確認
VBAで日付を扱う際は、セル内のデータが「日付シリアル値」として認識されているか確認しましょう。文字列として入力されていると、計算が正しく行われません。
3. 将来の日付
DATEDIF関数は、開始日が終了日より未来の場合、エラー(#NUM!)を返します。入力チェックを行う際は、ISERROR関数やVBAでのIF文を組み合わせて、予期せぬエラーを防ぐ工夫を推奨します。

このテクニックをマスターすれば、名簿管理の効率が格段に上がります。ぜひ今日から活用してください。

タイトルとURLをコピーしました