【VBAリファレンス】Excelで期間計算を極める!DATEDIF関数で「○年○か月」と表示する完全マスターガイド

スポンサーリンク

概要:Excelで期間計算を正確に行うための必須スキル

Excel業務において、「開始日」と「終了日」から経過期間を算出するケースは極めて頻繁に発生します。例えば、従業員の勤続年数、プロジェクトの経過期間、あるいは契約期間の管理などです。「○年○か月」という形式で期間を表示したいとき、多くの方が「引き算」や「割り算」を駆使して悪戦苦闘しますが、実はExcelにはこの目的のために特化した強力な関数が存在します。それが「DATEDIF関数」です。

DATEDIF関数は、Excelの公式ヘルプには記載されていない「隠し関数」的な側面を持ちますが、その実用性は極めて高く、実務レベルで避けては通れないツールです。本記事では、このDATEDIF関数の基本構文から、実務で遭遇しやすい落とし穴、そしてVBAを用いた自動化の手法まで、プロフェッショナルな視点で詳細に解説します。

詳細解説:DATEDIF関数のロジックを理解する

DATEDIF関数は、2つの日付の間の期間を、指定した単位で計算するための関数です。まずは基本構文を確認しましょう。

構文:=DATEDIF(開始日, 終了日, 単位)

この関数の最大の特徴は、「単位」の指定方法にあります。
・”Y”:期間内の満年数
・”M”:期間内の満月数
・”D”:期間内の満日数
・”YM”:1年未満の端数の月数(年を無視して計算)
・”MD”:1か月未満の端数の日数(月を無視して計算)
・”YD”:1年未満の端数の日数(年を無視して計算)

「○年○か月」と表示させたい場合、これらを組み合わせる必要があります。具体的には、「年数」を求めるために”Y”を使い、「端数の月数」を求めるために”YM”を使うという組み合わせが最適解となります。

数式にすると以下のようになります。
=DATEDIF(開始日, 終了日, “Y”) & “年” & DATEDIF(開始日, 終了日, “YM”) & “か月”

この数式のロジックは非常にシンプルですが、非常に強力です。例えば、2020年1月1日から2023年5月15日までの期間を計算する場合、「Y」で3年が算出され、「YM」で4か月が算出されます。結果として「3年4か月」という、人間にとって直感的な文字列が生成されるのです。

サンプルコード:VBAで期間計算を自動化する

Excelのセル上での計算も便利ですが、大規模なデータセットを扱う場合や、ユーザーフォームで期間を表示したい場合には、VBAでの制御が不可欠です。以下に、指定した2つの日付から期間を算出し、文字列として返すユーザー定義関数の例を紹介します。


' 指定した2つの日付から期間を「○年○か月」の形式で取得する関数
Function GetPeriodString(startDate As Date, endDate As Date) As String
    Dim years As Long
    Dim months As Long
    
    ' 日付の整合性をチェック
    If startDate > endDate Then
        GetPeriodString = "エラー:開始日が終了日より後です"
        Exit Function
    End If
    
    ' DATEDIFのロジックをVBAで再現
    ' Application.WorksheetFunctionではDATEDIFは呼び出せないのでDateDiffまたは計算で対応
    ' ここではより正確な日付計算のためにDateDiffとDateAddを併用する
    
    years = DateDiff("yyyy", startDate, endDate)
    If DateAdd("yyyy", years, startDate) > endDate Then
        years = years - 1
    End If
    
    months = DateDiff("m", DateAdd("yyyy", years, startDate), endDate)
    If DateAdd("m", months, DateAdd("yyyy", years, startDate)) > endDate Then
        months = months - 1
    End If
    
    GetPeriodString = years & "年" & months & "か月"
End Function

このコードでは、Excelの関数を使わずにVBAのネイティブな日付操作関数を利用しています。これにより、ワークシート上の設定に依存せず、堅牢な計算が可能になります。

実務アドバイス:エラー回避とUXの向上

DATEDIF関数を使用する際、実務で必ず直面するのが「開始日」が「終了日」よりも未来にある場合のエラー(#NUM!)です。これをそのまま放置すると、表計算全体が崩れてしまい、クライアントや上司に不信感を与えかねません。

プロのテクニックとして、必ずIF関数で囲うことを推奨します。
=IF(開始日>終了日, “日付異常”, DATEDIF(開始日, 終了日, “Y”) & “年” & DATEDIF(開始日, 終了日, “YM”) & “か月”)

また、期間が「0年」や「0か月」の場合の表示にも配慮が必要です。「0年4か月」と表示すべきか、単に「4か月」と表示すべきか。要件に応じて、IF関数で条件分岐を細かく設定してください。例えば、「もし年数が0なら月数のみを表示する」といったロジックを組み込むだけで、表の可読性は飛躍的に向上します。

さらに、日付データそのものがシリアル値として正しく認識されているかも重要です。CSVなどから取り込んだ日付データは「文字列」として読み込まれていることがあり、その場合DATEDIFは機能しません。必ずDATEVALUE関数や区切り位置機能を使って、シリアル値への変換を事前に行っておきましょう。

まとめ:正確な期間計算が業務の信頼性を高める

Excelにおける「○年○か月」の表示は、単なる見た目の問題ではなく、データの整合性を担保する重要な工程です。DATEDIF関数という強力なツールを使いこなし、かつVBAでの自動化まで視野に入れることで、あなたのExcelスキルは次のステージへと進化します。

1. DATEDIF関数の単位指定(Y, YM)を正確に理解すること。
2. エラー処理(開始日>終了日の判定)を必ず組み込むこと。
3. 大規模データやシステム連携にはVBAを活用すること。

これら3点を意識するだけで、あなたの作成する帳票や管理表は、より専門的で信頼性の高いものへと変わります。日々の業務効率化に向けて、まずは今すぐ手元のExcelでDATEDIF関数を試してみてください。その正確さと手軽さが、あなたの作業時間を大幅に短縮してくれるはずです。Excelという道具をどう使いこなすか、その選択肢の一つとして、今回の期間計算ロジックをぜひ武器にしてください。

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