30日/月、360日/年のルールに基づいた日数計算を行ないます。
『#VALUE!』
ktDAYS360 ( Start_Date, End_Date, Method, [Fraction] )
返却値 ‥‥‥ Variant (Integer 又は Double) 型 Start_Date ‥‥‥ Variant(Date) 型 End_Date ‥‥‥ Variant(Date) 型 Method ‥‥‥ Integer 型 Fraction ‥‥‥ Boolean 型 (省略可、省略時:False )
「30日/月、360日/年」のルールに基づいて、Start_Date 〜 End_Date 間の日数を計算します。
Fraction = True の場合は、[日数÷360] の年比率を返します。
[ Start_Date , End_Date , Method の指定値が不正 ] または [Start_Date > End_Date ] の
場合には [#VALUE] が返ります。
( 補 ) 月数 について
ktDAYS360 で得られる結果は 日数 ( 310日間 など ) です。
月数 が必要な場合は下記の計算で求めて下さい。
月数 = INT ( 日数 ÷ 30 ) , 端数日数 = MOD ( 日数 , 30 )
Start_Date ‥‥‥ 開始日を シリアル値 または 日付文字列で指定します。
※ 新元号「令和」対応になっていない環境でも
「令和 日付文字列(元年 表記を含む)」を指定可能です。
End_Date ‥‥‥ 終了日を シリアル値 または 日付文字列で指定します。
※ 新元号「令和」対応になっていない環境でも
「令和 日付文字列(元年 表記を含む)」を指定可能です。
Method ‥‥‥ 日数の計算方式を下記から指定します(詳細は解説を参照)。
0 : 30/360(SIA)
1 : 30/360(PSA) or (BMA)
2 : 30/360(ISDA) or (MSRB)
3 : 30E/360
4 : 30E+/360
Excel/DAYS360関数との対応は下記の通りです(Fraction = False 時)。
[方式 = False (NASD方式)] → 1: 30/360(PSA)
[方式 = True (ヨーロッパ方式)] → 3: 30E/360
Fraction ‥‥‥ 省略 または False を指定した場合は「日数」を返します。
True を指定した場合は「日数÷360」の年比率を返します。
Excel/YEARFRAC関数との対応は下記の通りです(Fraction = True 時)。
[基準 = 0 (NASD方式)] → 0: 30/360(SIA) …注:Excelのバグ参照
[基準 = 4 (ヨーロッパ方式)] → 3: 30E/360
欧米圏の通貨/債券などは「30日/月&360日/年」で取り扱うものがあります。これに合わせた日数
計算と年比率計算を行ないます。より詳しい解説は ねぇ、DAYS360でホントに良いの を参照。
Excel のDAYS360/YEARFRAC にはバグが有って正しい計算が行なわれていません。DAYS360/
YEARFRAC の代替関数として使ってください。
『30日/月 & 360日/年』方式での「開始日〜終了日」間の日数は以下の式で計算されます。
日数 = 360*{ 年(終了日) - 年(開始日) }
+ 30*{ 月(終了日) - 月(開始日) } + { 日(終了日) - 日(開始日) }
但し、この式に当て嵌める前に開始日/終了日に対して、『月末日などの条件による日付の調整』が
行なわれます。調整方法の説明の中で、
〔 終了日の31日は、31日のままとする ← 同義 → 終了日の31日を、翌月1日とする 〕
という補足をしてありますが、これは下記の2式が等しい事から理解できるでしょう。
31日のまま : 30*{ 月(終了日) - 月(開始日) } + { 31 - 日(開始日) }
翌月 1日 : 30*{ 月(終了日) + 1 - 月(開始日) } + { 1 - 日(開始日) }
30/360 (SIA)
(1) 期間の最終日が2月末日で、期間の開始日も2月末日の場合、終了日を30日に置き換える。
(2) 開始日が31日または2月末日の場合、開始日を30日に置き換える。
(3) 上記(2)適用後の開始日が30日で且つ終了日が31日の場合、終了日を30日に置き換える。
(つまり、開始日が29日以前ならば、最終日は31日のまま。これは、翌月1日に置換と同義)。
30/360 (BMA) 30/360(PSA) とも言う (PSA は BMA の前身 )
(1) 開始日が31日または2月末日の場合、30日に置き換えます。
(2) (1)を適用した後の開始日が30日で且つ終了日が31日の場合は、終了日を30日に置き換えます。
(つまり、開始日が29日以前ならば、最終日は31日のまま。これは、翌月1日に置換と同義)。
30/360 (ISDA) (same as U.S. Muni 30/360 即ち 30/360(MSRB ) )
(1) 開始日が31日の場合、30日に置き換える。
(2) 上記(1)適用後の開始日が30日で且つ最終日が31日の場合、最終日を30日に置き換える。
(つまり、開始日が29日以前ならば、最終日は31日のまま。これは、翌月1日に置換と同義)。
30E/360 (30/360 ISMA)
(1) 開始日が31日の場合、30日に置き換える。
終了日が31日の場合、30日に置き換える。
(2) 終了日が2月末日の場合、2月を30日/月には拡張しない。
より正確に言えば、2月の実日数が使用されます。
30E+/360
(1) 開始日が31日の場合、30日に置き換える。
(2) 終了日が31日の場合、翌月の1日に置き換える (これは、31日のままにする事と同義)。
なお、ktDAYS360関数のソースは こちら で公開しています。
Excel のDAYS360/YEARFRAC 関数にある 「NASD方式」の計算には不具合があります。
NASD(アメリカ証券業協会)が定める日数計算は『 SIA 準拠』となっていますが、Excel が行なっ
ている計算は SIA の定義通りには行なわれていません。
DAYS360(NASD)では、SIA-(1)の条件が抜けています。これは30/360(PSA)の計算となります。
(詳細はこちらを参照)
YEARFRAC(NASD)では多少複雑でバージョンによって異なります(詳細はこちらを参照)。
Excel97 : 30/360(SIA) の計算で正しく行なわれています。
Excel2000 以降 : 30/360(SIA) での計算ですが、条件の一部が欠落しています。
SIA-(3)の条件内の「上記(2)適用後の開始日が30日で」(これは「開始日=
30,31日 or 2月末日」の意味になります)から2月末日の条件が漏れて『開
始日=30 or 31日』のみの計算になっています。
これにより、「2月末日〜大の月の月末(31日)」という期間の場合に、Excel97
と Excel2000以降で結果が異なります。