期間から日数・月数などの日付計算を行ないます。
『#VALUE!』
ktDATEDIF ( StartDate, EndDate, [ Interval ], [ FirstDay ] )
返却値 ‥‥‥ Variant (String / Integer / Double) 型 StartDate ‥‥‥ Variant(Date) 型 EndDate ‥‥‥ Variant(Date) 型 Interval ‥‥‥ String 型 ( 省略可、省略時 : "YMD" ) Firstday ‥‥‥ Boolean 型 ( 省略可、省略時 : False )
Interval の指定に応じて、年数、月数、日数、年比率などを計算します。
[ StartDate , EndDate , Interval 指定値が不正 ] または [ StartDate > EndDate ] の
場合には [ #VALUE! ] が返ります。
StartDate ‥‥‥ 開始日 を シリアル値 または 日付文字列で指定します。
※ 新元号「令和」対応になっていない環境でも
「令和 日付文字列(元年 表記を含む)」を指定可能です。
EndDate ‥‥‥ 終了日 を シリアル値 または 日付文字列で指定します。
※ 新元号「令和」対応になっていない環境でも
「令和 日付文字列(元年 表記を含む)」を指定可能です。
Interval ‥‥‥ 計算方式を下記から指定します(小文字でも可)。
"YMD" : "y年mヶ月d日" で編集(文字列)
"Y" : 期間内満年数
"M" : 期間内満総月数 ( 13ヶ月など )
"YM" : 年未満の端数の月数 ( 0〜11 )
"MD" : 月未満の端数の日数 ( 0〜30 )
"YD" : 年未満の端数の日数 ( 0〜365 )
"FR" : 年比率(Double型, YEARFRACモード)
省略時の既定値は 『 "YMD" 』 です。
FirstDay ‥‥‥ 民法規定 の 期間計算では 『 初日不算入 (即ち、開始日 の 日付は
カウント に加えない) 』 が基本です。
[ FirstDay = True ] とすると 『 初日算入 』 で計算します。
省略時の既定値は [ False ] で 『 初日不算入 』 です。
Excel のDATEDIF関数と同等の計算を行ないます。
ただし、DATEDIF関数には、MD/YDの有名なバグがあります。また、Excel2007になって
バグの状況が更に悪化しており、DATEDIF関数を安易に利用できる状況ではなくなって
きています。
この ktDATEDIF 関数(Y, M, YM, MD, YD) はDATEDIF の代替関数として使ってください。
なお、Interval="FR" 以外は、ktPeriodYMD関数の[1a] でも同じ計算結果が得られます。
Interval="FR" は、Excel のYEARFRAC関数 [基準:1 (Actual/Actual) ] に相当しますが、
計算結果は異なります。これについては下記の「年比率について」を参照してください。
この日付計算は「民法規定」に従って計算しています。民法規定 を判り易く整理すると下
記のようになります。
a ) 「期間の初日」 はカウントしない。即ち、引数:開始日に指定した日付は
カウントせず、その翌日からカウントする。
(FirstDay = True と指定すると 『初日算入』 で計算します)
b ) 「1日」 からカウントする場合は(即ち、引数:開始日に月末日を指定)、
月の大小閏に係わりなく、月末日までで 「満 n ヶ月」、開始日と同月の
月末日までで 「満 n 年」 となる。
c ) 「1日」 以外からカウントする場合は(即ち、引数:開始日が月末日でない)、
開始日と「同日」 までで 「満 n ヶ月」、開始日と 「同月日」 までで 「満 n 年」
となる。但し、月の大小閏の関係で対応する 「同日」 「同月日」 が存在しな
い場合は、月末日までで 「満 n ヶ月」 「満 n 年」 となる。
--+--------+--------+--------+--------+--------+--- 暦 ( + 〜 + が 1ヶ月 )
<----------------------------------------> 計算期間
#========#--------#========#--------#***** 応当日単位で 1ヶ月カウント
この例では [ 4ヶ月 + 端数日数 ]
補足 ) 引数: Y , M , YM , MD , YD の意味
上記仕様で計算される 「満 n ヶ月( 13ヶ月 など )」 が [M]の月数。それを12で
割った商が [Y] の年数で、余りが [YM] の月数。「満 n ヶ月」 となる日付の翌日
から [引数:終了日] までの日数が [MD] の日数。「満 n 年」 となる日付の翌日
から[引数:終了日] までの日数が [YD] の日数。
なお、ktDATEDIF関数のソースは こちら で公開しています。
Interval="FR"は、YEARFRAC関数の[基準:1 (Actual/Actual)] に相当します。ただし、
YEARFRACとは計算方法が異なります。
そもそも、YEARFRAC 関数(Actual/Actual) の計算方法は、公的機関・債券/通貨を扱う
準公的機関が定めて国際的に通用している計算方法の何れとも合致しません。
Excel 独自の計算方法が採られています。
ktDATEDIF 関数では、『抽象的2月29日説』という日本での年比率計算で一般的な計算
方法に基づいて計算しています。詳細は下記を参照して下さい。
ILCジャーナル / 「金利及び弁済金額計算に関する法律と実務」 抜粋
『金利計算と閏年・端数処理について』 大阪弁護士会所属 弁護士 服部 廣志
http://www.ilc.gr.jp/journal/000109/ (by Internet Archive )
補:インターネット法律協議会 ( ILC ) - 2017年5月31日 閉鎖 -
難しく書かれていますが、『抽象的2月29日説』 を要約すると以下のように計算します。
a) [開始日〜終了日] から [ y 年 と d 日間 ] という期間を算出する( d は "YD" に
よる端数日数のことです)。
b) 年比率 = y + ( d ÷ 年間日数 [365 or 366] ) で比率を計算する。
c) 365 と 366 の何れで割るかの判断は、半端日数部分 (d日間) の初日から見て、
向こう1年間の間に2月29日が有れば 366、無ければ 365 で割ります(向こう1年
間の年間日数で割るという事です)。
(例)
2003/5/10 - 2007/6/20 → 4年41日間 → 4.1120218579 ( = 41/366)
[2003/5/10(ex) - 2007/5/10(in)] で4年間。[2007/5/11(in) - 6/20(in)] で41日間。
[2007/5/11(in) - 6/20 - 2008/5/10(in)] の間に2/29があるので366日/年。
2003/5/10 - 2008/6/20 → 5年41日間 → 5.1123287671 ( = 41/365)
[2003/5/10(ex) - 2008/5/10(in)] で5年間。[2008/5/11(in) - 6/20(in)] で41日間。
[2008/5/11(in) - 6/20 - 2009/5/10(in)] の間に2/29がないので365日/年。