ExcelVBAのDateDif関数と、
ワークシート関数DATEDIFの違いを解説します。
同じところ
どちらも二つの日付を受け取って、
その差を「年」や「月」など指定した単位で受け取る関数です。
違うところ
名前は非常に似ている関数ですが、中身は全く違う関数です。
例えば「年」の差を計算したとき、
シート関数のDATEDIFは年齢を計算してくれる関数になります。
対してVBAのDateDiff関数は、単純に「年の差」しか計算できません。
例えば「2024/12/31」生まれの赤ちゃんは翌「2025/1/1」では当然0歳ですが、
DateDiff関数では「2025と2024の差」である「1」を返してしまいます。
つまりVBAのDateDiff関数は、
「Year(日付2) - Year(日付1)」を計算するだけの関数ということです。
よって、実際のところVBAのDateDiff関数はあまり使用する場面はありません。
使い分け
年齢の計算や経過月数を計算するにはシート関数のDATEDIFしか使えませんので、
常にこちらを使っておけばよいと言いたいところなのですが。
困ったことに、シート関数のDATEDIFは隠し関数(非推奨)であるためか、
WorksheetFunction.DateDifは残念ながら存在しません。
かと言ってVBAのDateDiff関数で代用ができるわけではないため、
VBAで年齢や経過月数を計算するには以下のいずれかの方法を利用します。
- Formulaプロパティを使用してシート関数で計算する
- EVALUATEメソッドを使用する
- 自作関数で対応する
詳しくは下記記事で解説していますのでこちらをご覧ください。
www.limecode.jp