OpenOfficeで日付の扱いを極める-4 『エクセルとOpenOfficeで共通の関数を使う

OpenOfficeで日付の扱いを極める-3でOpenOfficeの独自関数を使って期間を求める方法を紹介しました。
ただ、この方法にはいくつか問題があります。
第一には、もちろん、エクセルとの間で相互にデータのやり取りができないこと。
そして、エクセルなら、=DATEDIF(開始日,終了日,"MD")で可能な、年と月を除いた経過日数を求めることです。

上のことを解決するためには、エクセルとOpenOfficeの両方で使える関数を用いて処理を行なう必要があります。

以下、サンプルからデータを取って説明します。
この記事を書いているのが、2011年8月28日なので、今日を2011/8/28と理解していただけますようお願いします。
浜村花子 1965/06/21 46 46 2
B2セルに誕生日が入っているとして、

  1. C2は、数え年 
  2. D2は、満年齢 
  3. E2は、年を除いた経過月数 
  4. F2は、年と月を除いた経過日数です。

1番の数え年は、=YEAR(TODAY())-YEAR(B2)で、現在の年から誕生日の年を引けば得られます。

2番の満年齢以降が複雑です。
=IF(MONTH(TODAY())A・・・=IF(DAY(TODAY())B・・・MONTH(TODAY())-MONTH(B2)-1・・・
ここまでで、上の例だと、今日が21日よりも前の場合について
今日の月が6月以前ならAの処理 今日の月が6月よりも後ならBの処理を行なうという場合わけができたことになります。


今日の日が、誕生日の日と同じか、それより大きい場合、さらに今日の月から誕生日の月を引いた値がゼロより小さい場合、
今日の月から誕生日の月を引いた値に12を加えます。
C・・・MONTH(TODAY())-MONTH(B2)+12・・・

今日の日が誕生日と同じかそれより大きいが、今日の月から誕生日の月を引いた値がゼロかそれよりも大きい場合は、今日の月から誕生日の月を引くだけにします。
D・・・MONTH(TODAY())-MONTH(B2)・・・

ここで今日が21日以降の場合について
今日の月が6月よりも前の場合、Cの処理 6月以降の場合、Dの処理を行なうという場合わけができたことになります。
長くなったので記事を分けたいと思います。
経過日数を求める編は、こちらをどうぞ。


OpenOfficeでエクセルと共通の関数を使って経過年月日を求めるサンプルファイルはcalc029.odsをダウンロードしてください。エクセル形式のファイルはcalc029.xlsをダウンロードしてください。


送信者 OpenOffice