| 「中級・特別編トップへ」 | |
| 中 級 20 |
Excelの基礎■ |
| |
|
■DATEDIF関数DATEDIF関数は、指定した期間内の日数や月数あるいは年数を求める関数です。大変便利な関数ですが、関数の貼り付けダイアログボックスには表示されません。その理由は、この関数がエクセルの古いバージョンの時代に、Lotus 1-2-3(表計算ソフト)の
関数と互換性を保つために作られたものであるからです。ダイアログボックスに表示されないのは、元々の仕様です。また、Excel2000のヘルプには記載されているものの、Excel2002以降では、ヘルプから消えています。徐々に捨てられつつあるのかもしれません。 書式で表すと、DATEDIF(開始日,終了日,単位)となります。
備考に記したように、"MD"と"YD"の計算にはバグがあります。(参照
→ こぼれ話)
◆使用例 1
単位指定記号の種類により、求められる値が異なることに注目してください。
上図のように、引き算させると表示形式は日付の表示形式が自動的に適用され、1901/1/8になります。これをシリアル値で表示できる標準の表示形式に戻すと、期間内の日数になります。
◆使用例 2"MD"と"YD"の計算にはバグがあります。これを確認してみましょう。 (1)MDのバグ
MDでの計算は、期間を計算し○年○ヶ月○日のうち、○日を求めるものです。図での開始日はすべて月末なので、答えは1日〜20日の日数でいいのですが、D3とD4は明らかに間違っています。 (2)YDのバグ
D3とD4は期間に閏年(2004年)が含まれているため計算違いをしています。共に1年後を特定できていないように思えます。D5は閏年を含まないため正しい答えが求められています。 さて、これ等MDとYDのバグは実験の結果知りえたものです。この他の計算でもバグが含まれている可能性があります。ですから、DATEDIF関数を使う場合、MDとYDの計算では使わないようにしましょう。うっかり使ってしまい、恥をかくことがあるかもしれません(笑)ここでわざわざバグ情報を掲載している理由もそこにあります。ただし、他の指定記号ではバグはないので安心して使ってください。 (3)バグの回避方法 MDやYDのバグは他の関数で簡単に回避する方法(代替方法)があるのでは?と考え、いろいろ試したみました。ところがこれが以外に面倒です。代替の計算式を作るとなると、いろいろなケースに対応して正しい答えが求められるものでなければなりません。特に閏年の場合、たとえば、1/29、1/30、1/31の1カ月後(1年後)は?などを求める必要があります。一応作ってはみたものの説明も面倒なので掲載することを止めます。その代わり、すでにこの計算式を作られている方のページがありますので紹介しておきます。このページを参考に、興味のある方は代替方法を考えてみてください。 HP名:Addin Box(管理人:天魔さん) 解説ページ(DATEDIFによる期間計算)
◆使用例 3よく使われる年齢計算の例を紹介しておきます。
(画像:Win XP&Excel2000) この例は、&を使い Y
の計算と YM
の計算を結合しています。MDはバグがあるので使っていません(笑) =DATEDIF(B4,TODAY(),"Y")&"歳 "&DATEDIF(B4,TODAY(),"YM")&"ヶ月" となります。これで、ブックを開くたびに再計算され、常に今日の日付で年齢が求められます。NOW関数でも同じ結果になります。 |