ロゴ(青) ロゴ(期間計算) ロゴ(緑)
エクセルファンクラブ(編集ラウンジ)で、『期間』に関して、ちょっと突っ込んだ話題を展開しています。
   ★スレッドはこちら    ★最終的な『まとめ』はこちら  ★DATEDIFでの年齢計算  ★ ktDATEDIF マクロ

第154回 国会/衆議院において、『年齢計算に関する質問』が行なわれていました。
         ★年齢の計算に関する質問主意書
         ★年齢の計算に関する質問に対する答弁書
         ○衆議院 質問の一覧     (154回国会 質問番号154番)
読み易いように、こちらのページに整理してあります。

民法 総則 第6章 期間 (現代語訳)
第139条 期間を時・分又は秒で定めたときは、即時から起算する。
第140条 期間を日・週・月又は年で定めたときは、期間の初日は、算入しない。ただし、その期間が午前0時から始まるときは、この限りでない。
第141条 期間を日・週・月又は年で定めたときは、期間末日の終了で期間が満了する。
第142条 期間の末日が大祭日、日曜日その他の休日に当たる場合、その日に取引を行なう慣習がある場合を除いて、期間は、その翌日をもって満了する。
第143条 週、月または年によって期間を定めるときは、暦(太陽暦)に従って期間を計算する。
週、月または年の始めより期間を起算する場合を除き、その期間は、最後の週、月または年の起算日に相当する日の前日で満了する。ただし、最後の月に応当する日がないときは、その月の末日に満了する。
年齢計算ニ関スル法律(明治35年12月22日 施行)
1  年齢は出生の日より起算する。
2  年齢の計算には民法第143条の規定を準用する。

期間計算の一般原則(日・週・月・年を単位として定める場合)
1. 期間が午前0時から始まる場合を除いて、期間の『初日』は不算入とする(第140条)。
2. その期間の『末日の終了(24時)』をもって、期間の満了とする(第141条)。
3. 期間を週・月・年を単位として定める場合は、暦(太陽暦)に従って計算する(第143条-1)。
(週・月・年の始めから期間を起算する場合は、最後の週・月・年の末日をもって満了する。1日からは月末をもって、日曜日からは土曜日をもって満了とする)
4. 週・月・年の始めから期間を起算する場合を除いて、起算日の応当日前日で期間は満了する。但し、最後の月に応当する日がないときは、その月の末日をもって満了する。 (第143条-2)。
5. 期間の満了する日が取引上の休日の場合は、その翌日をもって満了とする(第142条)。
6. 年齢は出生の日より起算し、出生日の応当日前日の満了をもって加齢する。

[ この場所へのリンク ]
学齢について  (2004/12/26 説明文を多少判り易くしました)
     年齢は『初日算入』ですから、出生日に応当する日の前日(即ち誕生日の前日)で丸『1年間』となります。
     では2001年4月1日生まれの人が満1歳になるのは2002年4月1日の朝からかというと、そうでもない。満年齢の考え方と民法の定めにより、加齢されるのは『(出生日に)応当する前日の満了をもって』となっているので、3月31日24時を迎えた瞬間に始めて満1歳となる(23時59分までは満11ヶ月)。
     なお、3月31日24時=4月1日0時だから、「4月1日の今日から満1歳」という呼び方も間違っていないが法律上の加齢される日はあくまでも3月31日である。
     4月1日生まれの子供が早生まれとして1学年[上]となる根拠がこの下線部分にあるのですが、その前に「子供を小学校へ入学させる時期」を定めた法律として
      ---- 学校教育法第22条第1項 ----
    保護者の小学校の就学義務を子どもの満6歳に達した翌日以後における
    最初の学年の初めから満12歳に達した日の属する学年の終りまでとする。
   というものがあります。学年は「4月1日」から始まりますので、上記の法律をもう少し判り易く表現すると
      「満6歳に達した日」の翌日から見て最初に訪れる「4月1日」に小学1年生として入学させなさい。
   となります。満6歳に達する日付(法律上の加齢される日付)は上記の通り、
    4月1日生まれ → 3月31日
    4月2日生まれ → 4月  1日
です。そうすると「その翌日から見て最初に訪れる4月1日」とは
    4月1日生まれ → 3月31日 → その年の4月1日(翌日が4月1日なので滑り込みセーフ)
    4月2日生まれ → 4月  1日 → 翌年の4月1日(翌日が4月2日で過ぎている為に丸1年待つ羽目に)
になります。この各々の「年」が小学校に入学する年になります。こういった理由により、4月1日生まれは4月2日生まれより、1学年早くなります。

尚、法律上、加齢される日付は「誕生日の前日」である、とする解釈は最高裁の判例としても残されています。
      『最高裁判例 S54.4.19』
        明治四五年四月一日生まれの者が満六○歳に達するのは右の出生日
        を起算日とし、六○年目のこれに応当する日の前日の終時点である昭和
        四七年三月三一日午後一二時であるが(以下略)

[ この場所へのリンク ]
期間計算の問題点
1. 「期間:月末〜月末」は『丸Nヶ月』です(初日不算入により『起算日=1日』となる為)。
2. 初日"算入"を謳った場合は「期間:1日〜月末」が『丸Nヶ月』です。
3. では、初日"算入"を謳った場合の「期間:月末〜月末」はどうなるか?
これは、初日"不算入"を謳った場合の「期間:月末前日〜月末」と等しい。
4. 1.の結果に『前日が1日加わっている』と考えれば『丸Nヶ月+1日』と考えたくなります。
しかし、[第143条-2]を基に考えると、その月の大/小/閏によって異なってきます。

「〜月末」という期間を人間が見る時、普段とは逆に後ろから数えてしまいがちですので、
余計にそう考えたくなる傾向が強くなります。つまり、普段は「頭から丸Nヶ月と残りの端数
d日」と数えるのに、月末まで埋まっていると「後ろから丸Nヶ月 と 頭の端数d日」と数えて
しまうのです。

起算日 (*1)  満了日  期間の考え方
3/31 5/31 「応当日前日:5月30日」で丸2ヶ月となり、プラス1日
3/31 4/30 「応当日前日:4月30日」で丸1ヶ月丁度
3/31 2/28 or 29 「応当日前日:2月30日」が無いので末日(28/29日)で
 丸11ヶ月丁度
4/30 5/31 「応当日前日:4月29日」で丸1ヶ月となり、プラス2日
4/30 6/30 「応当日前日:6月29日」で丸2ヶ月となり、プラス1日
4/30 2/28 or 29 「応当日前日:2月29日」で丸10ヶ月丁度
(平年の場合も[第143条-2]により丸10ヶ月丁度
2/28(平年) 3/31 「応当日前日:3月27日」で丸1ヶ月となり、プラス4日
2/29(閏年) 3/31 「応当日前日:3月28日」で丸1ヶ月となり、プラス3日
2/28(平年) 2/29(閏年) 「応当日前日:2月27日」で丸12ヶ月となり、プラス2日
2/29(閏年) 2/28(平年) 「応当日前日:2月28日」で丸12ヶ月丁度
    (*1) [初日不算入] ならば開始日の翌日、[初日算入] ならば開始日当日
5.
民法では、このような場合に日数を何日間とするかについては言及していません。
民法で謳っているのは「『X日からNヶ月間』とした場合の『満了日はY日』です」という定義です。
そして、ここには『Nヶ月と1日間』といった『日の端数』は出てきません。


第141条 期間を日・週・月又は年で定めたときは、期間末日の終了で期間が満了する。
第143条 週、月または年によって期間を定めるときは、暦(太陽暦)に従って期間を計算する。
週、月または年の始めより期間を起算する場合を除き、その期間は、最後の週、
月または年の起算日に相当する日の前日で満了する。ただし、最後の月に応当
する日がないときは、その月の末日に満了する。
この問題は、期間計算の処理を『丁度 Nヶ月』となる「日付の組み合わせ」以外でも実行させるが故に
発生してしまうものです。法律での定めが無い以上、この部分は、
(1) 期間計算に関わる当事者間で取り決めて、それに従うアルゴリズムを利用する(もしくは作り上げる)。
(2) 満了日かどうかを判断する為ならば、日数の値には拘らずに、単に『端数の日数がゼロか否か
(丁度Nヶ月か)』のみ注視する。
のどちらかで対処するしかないでしょう。

kt関数【ktPeriodYMD】の計算方法『1b』では【民法 第143条2項】に
      『3 月末日の応当日は月末日とする。
という条項を独自に加える事で、上記のパターン全てについて【Nヶ月+1日】という結果を返します。

     

期間計算と『ktPeriodYMD』のパラメータ
1. 民法の定義に従った期間計算は『"1a",初日算入=False,末日算入=True 』です。
2. 年齢計算で、法律上の加齢される日(24時と読む側の日なので生年月日の前日)に加齢する
計算は『"1a",初日算入=True,末日算入=True 』です。
3. 年齢計算で、慣例として呼ばれている【今日からXX歳】という場合、つまり生年月日の当日に
加齢する計算は『"1a",初日算入=True,末日算入=False 』です。
4. 年齢計算では『算出対象="y"』とすれば、年数部分だけが数値として返ります。
  
    ktDATEDIF 関数(マクロ) をブック内の標準モジュールにコピーすれば同じ計算ができます。


エクセル関数のDATEDIF でも期間計算は出来ますが、このDATEDIF 関数には有名なバグがあり、
    正しい結果が得られない場合があります。このバグに関する解説は芳坂さんのHPから
        「エクセル奇譚/DATEDIF疑惑/DATEDIFの謎に迫る
    を参照して下さい。

    このDATEDIF のバグを回避しつつ、エクセル関数だけで求める式を
        『ktPeriodYMD/DATEDIFによる期間計算
    にて紹介していますので参考にしてください。


[ この場所へのリンク ]
(補足 : 年齢計算とDATEDIF関数) (2006/5/17 追記)
    法解釈上では「出生日〜誕生日前日(の24時)」で『満X才』ですが、DATEDIF関数などを使うと、
    「出生日〜誕生日」というパラメータで『満X才』という結果が得られます。これはDATEDIF関数
    を始めとするエクセルの日付関数では『初日不算入』の条件で算出している為です。

    したがって、
        社会一般的にいう「誕生日の今日から満X才」という見方での年齢は
        【出生日〜調べる日付】という算出で行なえます。
            =DATEDIF(出生日, 調べる日付, "Y")

    一方、
        法解釈上の「誕生日前日で満X才」という見方による年齢の場合には
        【出生日〜[調べる日付+1] 】という算出で行います。
            =DATEDIF(出生日, 調べる日付 + 1, "Y")
        これは、DATEDIFが初日不算入でしか算出しない為に除かれている
            初日の1日分を、『翌日に出る結果を今日求める』
        という考え方で補うものです。


    どちらで計算するかは、その年齢を扱う業務の取決めを調べて決めてください。


[ Home へ戻る ]
ロゴ(ゴールド)   ロゴ(ピンク)

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