ktDAYS360

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 のバグについて 】

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以降で結果が異なります。


Home  kt関数 Top  kt関数 Ref  Back Page  Next Page


角田 桂一 Mail:addinbox@h4.dion.ne.jp CopyRight(C) 2004 Allrights Reserved.