ロータスアプローチにアプローチ?
アプローチ? ヒント集 お役立ちソフト 当初の開設目的 活用情報掲示板 お知らせ
リンク Links Links 更新履歴 管理人へメール トップページへ サイト内検索

トップページ >> ヒント集 >> 指定月数後の月末日を計算

approach 指定月数後の月末日を計算
指定した月数後の月末日を計算してみましょう。

第一回の支払のあと月払いで何回か支払うとします。
そういった場合に、最終回の支払年月の末日が、いつになるのか、
計算してみましょう。

年月日は、生活していく上で、様々な場面で、重要な意味を持っていますが、
コンピュータで日付を扱うのは、意外に難しいものです。

というはの、ご承知のように、
月は12月までだったり、
月末は、30日の月と31日の月がある上に、
2月の月末は、うるう年なら29日、平年なら28日と、
いろいろな制限があるためです。

でも、この制限を計算式にするポイントが分かれば、
日付を扱う、他のいろいろなケースに応用することができます。
参考にしてください。

このページは、「活用情報掲示板」での タカ さんの質問がきっかけとなり、
作成したものです。質問ありがとうございました。

1. データベースは、つぎのようなフィールド定義にします。
  フィールド名 データ型 式/オプション
 1 支払始期 日付型 IME オフ
 2 支払月数 数値型 IME オフ
 3 始期年 計算型 Year(支払始期)
 4 始期月 計算型 Month(支払始期)
 5 計算月数 計算型 支払月数 + 始期月 − 1
 6 年数 計算型 Trunc(計算月数 / 12, 0)
 7 支払月chk 計算型 計算月数 − 年数 * 12
 8 支払年 計算型 始期年 + 年数 − If(支払月chk = 0, 1, 0)
 9 支払月 計算型 If(支払月chk = 0, 12, 支払月chk)
10 うるう判定 計算型 If(Mod(支払年, 400)=0, 'u',
  
If(Mod(支払年, 100)=0, 'h',
    If(Mod(支払年, 4)=0, 'u', 'h')))
11 支払月末日 計算型 If(支払月 = 2,If(うるう判定 = 'u', 29, 28),
    If(支払月 = 4 or 支払月 = 6 or 
     
支払月 = 9 or 支払月 = 11, 30, 31 ))
12 支払終期 計算型 Date(支払月, 支払月末日, 支払年)

2. 各フィールドの説明です。
 1. 支払始期フィールドには、日付を入力します。
 2. 支払月数フィールドには、支払する月数を入力します。
 3. 始期年フィールドでは、支払始期フィールドから年数を取り出します。
 4. 始期月フィールドでは、支払始期フィールドから月数を取り出します。
 5. 計算月数フィールドでは、支払月数 + 始期月 − 1 で、最終月を仮計算します。

  ここで − 1 としているのは、このサンプルでは、最初の月を1回目の支払月と
  数えることにしているためです。
  たとえば、支払始期が 2002年11月11日で、支払月数が 1 だとすると、
  支払月数 + 始期月 − 1 とすれば、1 + 1 - 1 = 1 となります。
 6. 年数フィールドでは、計算月数が何年になるのか計算します。

  Trunc() については、こちらをご覧ください。
 7. 支払月chk フィールドでは、計算月数が何年になるのか計算したあとの
  残りの月数を計算します。
 8. 支払年フィールドでは、最終の支払年を計算します。
  
詳しくはこのあとで説明します。
 9. 支払月フィールドでは、最終の支払月を計算します。
  詳しくはこのあとで説明します。
10. うるう判定フィールドでは、最終の支払年が、うるう年かどうかの判定をします。
  詳しくはこのあとで説明します。
11. 支払月末日フィールドでは、最終の支払月の末日を算定します。
  詳しくはこのあとで説明します。
12. 支払終期フィールドは、支払月、支払月末日、支払年の各データを
  Date() 関数で日付型のデータに変換します。

3. 支払年フィールドの詳しい説明をします。

  このフィールドでは最終の支払年を計算しますが、計算式は、
  始期年 + 年数 − If(支払月chk = 0, 1, 0) となっています。
  うしろに付いている If(支払月chk = 0, 1, 0) は、
  計算月数から年数をマイナスしたあとの残りの月数がゼロの場合に
  調整をするためのものです。

  これは、年数フィールドと 支払月chk フィールドの計算でそれぞれ12に
  もとづいた計算をしているため、計算月数フィールドが12の倍数の時は、
  計算月数から年数をマイナスしたあとの残りの月数がゼロになります。

  その場合は、最終支払年月が 2005年0月 などということになります。

  このゼロになるのは、最終の支払月が12月になるべき場合で、
  支払年が1年多くなっているため、
  この支払年フィールドから1をマイナスします。

4. 支払月フィールドの詳しい説明をします。

  このフィールドでは、
  計算月数から年数をマイナスしたあとの残りの月数がゼロの場合は12にし、
  そうでなければ、支払月chk フィールドの値をそのまま使います。

  このように、計算月数から年数をマイナスしたあとの残りの月数がゼロの場合に、
  12にするのは、上記、支払年フィールドで説明したのと同じ理由で、
  残りの月数がゼロになるのは、最終の支払月が12月になるべき場合だからです。

  そして、残りの月数がゼロになる場合には、
  支払年フィールドから1をマイナスしますから、
  それに対応して、こちらの支払月フィールドでは12にするわけです。

5. うるう判定フィールドの詳しい説明をします。

  このフィールドは、下図のような、うるう年の判定ルールを計算式にしたものです。
  うるう年の場合は u 、平年の場合は h になります。

6. 支払月末日フィールドの詳しい説明をします。

  月末日は、30日の月と31の月があり、
  さらに平年の2月は28日、うるう年は29日となります。
  このフィールドでは、月に合わせて、月末日を算定します。

  計算式は、
  If(支払月 = 2, If(うるう判定 = 'u', 29, 28),
    If(支払月 = 4 or 支払月 = 6 or 
     
支払月 = 9 or 支払月 = 11, 30, 31 ))

  まず、If(支払月 = 2, If(うるう判定 = 'u', 29, 28), で、
  2月かどうかチェックし、2月なら、うるう年かどうかをチェックして
  うるう年なら29日、平年なら28日にします。
  そして、4、6,9,11のいずれかの月の場合は30日に、
  それ以外の場合は31日にします。

. 下図は計算した例です。


ご注意とお願い

実際に使用する前に、いろいろなデータを入力して、
正しい結果が得られるか、十二分に検証してください。

内容の正確性については、何ら保証できません。
トップページにも記載しましたように、
当サイトの情報は、皆さんの責任においてご利用下さい。

一行目に戻る

since Nov. 25, 2002 :