目次に戻る

DATEDIF関数の代用

DATEDIF関数
この関数は、二つの日付間の年数、月数、日数を求めることのできるとても便利な関数です。
でも、EXCELの関数ボックスにはありませんし、OpenOffice.orgのCalc(表計算ドキュメント)の関数にありません。

もともと Lotus 1-2-3(ロータス1-2-3) 独自の関数ですが、Excel は、1-2-3 のファイルと互換性を保つために用意したものです。
ですから Excel2002 には、ヘルプにもこの関数のことがあえて記載されていません。
そこで次のようにして解決します。


■DATEDIF関数のかわりに・・・

1、日付連番(シリアル値)を使う場合
シリアル値とは、1899/12/30 をゼロ、1899/12/31 1、以下順に 2、3・・・というように日付を連続した数値としたものを言います。
他のソフトは、たいてい 1900/01/01 を1としています。この基準となる数値は変更することができます。
メニュー → オプション → 表計算ドキュメント → 計算
 

まず参考例として、LOTUS 1-2-3 では DATEDIF関数 を次のように使います。
結果は、1981年5月5日生まれの人の2003年5月4日現在の満年齢です。

A B C
生年月日 年月日 年齢
1981/5/5 2003/5/4 @DATEDIF(A2,B2,"y")

EXCEL なら、 =DATEDIF(A2,B2,"y") 

OpenOffice.orgは、これに変わる関数が用意されています!!!

▼経過年数を求めるとき


    =YEARS(A2;B2;0) 
  • これがEXCELの =DATEDIF(A2,B2,"y") 1-2-3の @DATEDIF(A2,B2,"y") と同じになります。

    引数 0 のときは、実数で計算され、引数 1 のときは年が変わったときを 1 として計算されます。
    また、引数は省略できません。
   =YEARS("2002/12/31";"2003/01/01";1) の結果が 1 
    =YEARS("2002/1/1";"2002/12/31";1) の結果が 0 になります。


参考
今日で何歳?
    =YEARS(A2;TODAY();0)


▼経過月数を求めるとき(MONTHS

   =MONTHS(A2;B2;0)
  • EXCELの =DATEDIF(A2,B2,"m") 1-2-3の @DATEDIF(A2,B2,"m") に同じです。
  • 引数 0 のときは、実数で計算され、引数 1 のときは月が変わったときを 1 として計算されます。
    また、引数は省略できません。
▼経過日数を求めるとき(DAYS)

   =DAYS(B2;A2)
  • =DATEDIF(A2,B2,"y") に同じです。
    注:B2とA2が入れ替わっていることに注意してください。この関数に引数はありません。
    なお、=B2-C2 でも同じ結果になります。
▼経過した週の数を求めるとき(WEEKS)
  =WEEKS(A2;B2;0)
  • 引数 0 のときは、実数で計算され、引数 1 のときは週が変わったときを 1 として計算されます。
    また、引数は省略できません。
  • WEEKS関数で引数 1 を使うときは注意が必要です。
    オープンオフィスでは、週の始まりが月曜日からとなります。
    ですから「日曜→月曜」になるとき 1 増えます。
  • はじめに休みがあるのではなく、「働いたらお休み」ですね(^^♪
    この関数は、最近増加したネットビジネスとかアメリカやヨーロッパのように週給制が多いところには便利な関数となります。

    注1:オープンオフィスの表計算ドキュメントに使われる区切りの符号は「;(セミコロン)」です。
    注2:"ym"、"yd"、"my" のような「端数日」、「端数月」の引数は用意されていないようです。(1.1ベータ現在)


2、日付連番(シリアル値)を使わない方法


A B C D E F G
生年 生月 生日 年齢
1981 5 5 2003 5 4 21

セルG2で年齢を求める式は、次の通りとなります。

   =D2-A2+IF(B2>E2;-1;IF(AND(B2=E2;C2>F2);-1;0))

シリアル値を使わない方法は、次のようなメリットがあります。

ア、データベースとして使われると時、「生月」をもとにソート(並べ替え)すると、容易に誕生月別の一覧を作成することができます。

イ、誕生月別の人数も簡単に求めることができます。

ワークシート表1が次のようになっているとします。


A B
生年 生月
1981 5
1982 5
1983 5
1984 8
1985 9
1986 10
1987 5

   5月生まれの人数は =COUNTIF(B2:B14;5) で求めることができます。
   6月生まれの人数は =COUNTIF(B2:B14;6) で求めることができます。

別の方法としてデータベース関数を使ってみます。

ワークシート表2を次のようにします。


A B
生月 DCOUNT
’=5 =DCOUNT(表1.A1:C8;表1.B1;A1:A2)

セルA2に注意してください。条件は文字列でなければなりませんので先頭にアポストロフィを付けます。


ウ、オートフィルタを使った作業も簡単です。

データ範囲を選択後、メニュー→データ→フィルタ→オートフィルタで行います。

なお、例題ではC列を非表示しています。
列番号右クリック、表示しないで行えます。表示する場合はその両側の列番号を同時に選択し、表示する、にします。


オートフィルタが作成された画面です。

ボタンをクリックして5月を指定します。

5月生まれのリストができました。


目次に戻る