- ベストアンサー
エクセルで年齢を計算させようと
セルA1には生年月日B2に次の式を入れて =DATEDIF(DATEVALUE(A1),TRUNC(NOW()),"Y") 年齢の計算をさせていましたが、そのファイルでは正確に計算されていました。 別に新しく作ったファイルで#VALUE!となります。 全く同じ条件で新しく作ったファイルなのに 何故なんでしょうか? よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
datevalue関数に与える引数は、日付のように見える文字列でなくて はなりません。ちゃんとした日付シリアル値を与えると#value!エ ラーになります。おそらくそれが原因。datedif関数でドジったとし たら#num!エラーになるはずですからね。 「日付のように見える文字列」をタイプすると自動的に日付シリア ル値に変換されますし、「日付のように見える文字列」を四則演算 に使っても日付シリアル値に変換して使用されます。datevalue関数 は使わず、もしも文字列の混入があり得るのならdatedif(A1*1,... のように変換してしまうのが安全でしょう。 ついでにいうとdatedif関数は日付シリアル値の時刻相当部分を無視 するので、trunc関数も不要です。
その他の回答 (5)
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答No2です。エラーの原因は先に行っていたシートでは文字列として日付が入力されていましたが、新しいシートでは生年月日がシリアル数、すなわち数値として入力されていることによるものです。 シリアル数になっているデータにDATEVALUE関数を使った場合にはエラー表示されます。
補足
わかりました、了解です。 ありがとうございました。
- mt2008
- ベストアンサー率52% (885/1701)
正しく表示できた時はA1の日付を文字列で入れてあり、駄目な時はシリアル値になっていると思われます。 シリアル値の時はDATEVALUE(A1)ではなく、単にA1 でいけるかと。
補足
皆さん回答ありがとう御座います。 そうですね、単にA1でいけました。 でも最初のファイルは何故シリアルなのに表示されるのでしょうか?
- DIooggooID
- ベストアンサー率27% (1730/6405)
DATEVALUE() 関数は、 日付を表現している "文字列" を基に シリアル値 を求める機能があります。 #VALUE!となっているファイルの セルA1 が 文字列ではなく、 既に日付形式(シリアル値)になっていると思われます。 もし、セルA1が 日付形式になっているのであれば、 先頭に アポストロフィ を付加してみてください。 例. 2010/04/09 が入力されているならば、 '2010/04/09 としてみる。 ※DATEDIF関数 http://kokoro.kir.jp/excel/datedif.html
補足
回答ありがとうございます。 あれれ、そうなんですか? でも最初に作ったファイル(年齢表示されるファイル)は文字列で入れてないのに認識してるんですよ。 で、今回の質問のファイルにアポストロフィーを付けたら表示されました。
- KURUMITO
- ベストアンサー率42% (1835/4283)
DATEVALUE関数は文字列として生年月日が入力さてている場合に日付に直す関数です。通常は生年月日が1980/4/9と入力すれば日付の数値として認識され文字列とは認識されません。また、TRUNC関数も正常な使い方ではないでしょう。 次のような式にしてはいかがでしょう。 =DATEDIF(A1,TODAY(),"Y")
補足
早速にありがとうございます。 そうなんですか? TRUNC関数は正常な使い方ではないんですか? やはり=DATEDIF(A1,TODAY(),"Y")が正解なんですね。
- ToOrisugaru
- ベストアンサー率28% (80/280)
DATEDIF って なんですか? 私の環境(ex2007)には含まれてませんけど??
補足
回答ありがとう御座います そうなんですね。自動的に日付になりますね。 でも最初に作ったファイルはいけてるんですよ? truncもなくてもいけますね。 結論 =DATEDIF((H3),(NOW()),"Y") でいけました、これでいいわけですね?