0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excelで閏日を数える数式

Last updated at Posted at 2025-05-07

用途

  • 残存期間が1年以上(償還日が受渡日の1年応当日以降)である債券の残存年数の算出
    ※残存期間が1年以上である債券の残存年数=閏日を除く残存日数(片端)÷365

Excelでの数式

SEQUENCE関数を使うことができないExcel 2019以前でも使用可能な関数で構成する。
コメントいただいているとおり、SEQUENCE関数を用いれば、簡素に構成可能。

前提

次のとおり日付が入力されているものとする。

  • A1セル:受渡日
  • B1セル:償還日
    ※A1<B1

閏日の日数を得る数式

次のとおり数式を設定すれば、両日付の間の閏日の数を得られる。

=SUMPRODUCT((DAY(DATE(ROW(INDIRECT(CONCAT(YEAR(A1),":",YEAR(B1)))),2,29))=29)*1,(INT(A1)+1<=DATE(ROW(INDIRECT(CONCAT(YEAR(A1),":",YEAR(B1)))),2,29))*1,(DATE(ROW(INDIRECT(CONCAT(YEAR(A1),":",YEAR(B1)))),2,29)<INT(B1)+1)*1)

2つの年を与えた場合にその間の年を含む配列を返すための方法として
ROW(INDIRECT(CONCAT(YEAR(A1),":",YEAR(B1))))
を用いている。

その外側にSUMPRODUCT関数を用いているので、配列数式ではあるがCtrl+Shift+Enter不要。

日付の比較においてINT(A1)+1<=<INT(B1)+1としているのは、A1セル又はB1セルに時刻入りの日付が含まれている可能性を想定。

閏日を除く残存日数(片端)を得る数式

次のとおり数式を設定すれば、両日付の間の日数(片端)であって、閏日を除く日数を得られる。

=INT(B1)-INT(A1)-SUMPRODUCT((DAY(DATE(ROW(INDIRECT(CONCAT(YEAR(A1),":",YEAR(B1)))),2,29))=29)*1,(INT(A1)+1<=DATE(ROW(INDIRECT(CONCAT(YEAR(A1),":",YEAR(B1)))),2,29))*1,(DATE(ROW(INDIRECT(CONCAT(YEAR(A1),":",YEAR(B1)))),2,29)<INT(B1)+1)*1)

残存期間が1年以上であるか1年未満であるかに応じて残存日数(片端)を得る数式

IF関数及びEDATE関数を組み合わせて

=IF(B1>=EDATE(A1,12),INT(B1)-INT(A1)-SUMPRODUCT((DAY(DATE(ROW(INDIRECT(CONCAT(YEAR(A1),":",YEAR(B1)))),2,29))=29)*1,(INT(A1)+1<=DATE(ROW(INDIRECT(CONCAT(YEAR(A1),":",YEAR(B1)))),2,29))*1,(DATE(ROW(INDIRECT(CONCAT(YEAR(A1),":",YEAR(B1)))),2,29)<INT(B1)+1)*1),INT(B1)-INT(A1))

とする。残存年数を得るには365で除すればよい。

補論

http://seesaawiki.jp/w/minus_alpha/d/%B4%FC%B4%D6%B7%D7%BB%BB
にて紹介されている修正ユリウス日を用いる方法では、起算日又は満了日が閏日である場合に不具合を生じる。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?