【VBAリファレンス|実務向け】Excel実務の必須テクニック:DATEDIF関数とIF関数で「会員ランク」を自動判定する

スポンサーリンク

1. なぜ「日付の経過判定」が重要なのか

実務において、顧客のステータス管理や契約更新のタイミングを自動化することは、業務効率を劇的に向上させます。例えば「初回購入日から2年以上経過した顧客をゴールド会員にランクアップする」といった処理は、手作業で行えばミスが避けられません。ExcelのIF関数とDATEDIF関数を組み合わせることで、これらの判定を正確かつ瞬時に行うことができます。今回は、この「期間判定」の仕組みをマスターしましょう。

2. 基礎知識:DATEDIF関数の仕組み

DATEDIF関数は、2つの日付の間の「期間(年・月・日)」を計算するための関数です。
書式:=DATEDIF(開始日, 終了日, 単位)
ここで重要なのが「単位」の指定です。
・”y”:満年数
・”m”:満月数
・”d”:満日数

注意点として、DATEDIF関数はExcelの関数リストに表示されない「隠し関数」のような存在であるため、ダイアログボックスからは入力できません。直接セルに数式を入力する必要があります。また、単位に「”MD”」や「”YD”」を使用すると、計算結果に誤差が生じることがあるため、実務では「”y”(年)」や「”m”(月)」のような主要な単位での利用に留めるのが賢明です。

3. 実装と解決策:IF関数との組み合わせ

今回は、「初回購入日から2年以上経過していれば『ゴールド会員』、そうでなければ空欄」という条件を作成します。
論理式には「DATEDIF(開始日, 終了日, “y”) >= 2」を指定します。これにより、経過年数が2以上であるかという条件判定が可能になります。

4. サンプルプログラム:実践コード

まずは、G列に「初回購入日」、H列に「会員ステータス」を表示するケースを想定します。以下の数式をH4セルに入力し、下方向にコピーしてください。

数式例:
=IF(DATEDIF(G4, TODAY(), “y”) >= 2, “ゴールド会員”, “”)

解説:
・G4:開始日(初回購入日)
・TODAY():終了日(現在の日付を自動取得するため、常に最新の状態を判定できます)
・”y”:年単位で計算
・>= 2:2年以上という条件
・”ゴールド会員”:条件を満たした時の値
・””:条件を満たさない時は空欄を表示

5. 応用・注意点:現場で陥りやすいバグの回避策

実務でこの関数を使用する際、以下の点に注意してください。

1. TODAY関数の扱い
TODAY関数は、ファイルを開くたびにその日の日付に更新されます。もし「過去のある時点」を基準に判定したい場合は、TODAY()の代わりに特定の日付セルを参照するようにしてください。

2. エラー処理
開始日が終了日よりも未来の日付である場合、DATEDIF関数は「#NUM!」エラーを返します。データの入力ミスを防ぐためにも、IF関数で日付の整合性をチェックするか、データ入力規則で日付の範囲を制限しておくのがベテランの工夫です。

3. VBAへの移行
もし今後、この処理を自動化して「自動的に会員ランクを更新してリスト化したい」という場合は、VBAの「DateDiff関数」を使用します。VBAのDateDiffはExcel関数よりも挙動が安定しており、大規模なデータ処理にも適しています。まずはExcel関数でロジックを理解し、徐々にVBAでの実装へステップアップしていきましょう。

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