アプリ版:「スタンプのみでお礼する」機能のリリースについて

セルA1には生年月日B2に次の式を入れて
=DATEDIF(DATEVALUE(A1),TRUNC(NOW()),"Y")
年齢の計算をさせていましたが、そのファイルでは正確に計算されていました。
別に新しく作ったファイルで#VALUE!となります。
全く同じ条件で新しく作ったファイルなのに
何故なんでしょうか?
よろしくお願いします。

A 回答 (6件)

datevalue関数に与える引数は、日付のように見える文字列でなくて


はなりません。ちゃんとした日付シリアル値を与えると#value!エ
ラーになります。おそらくそれが原因。datedif関数でドジったとし
たら#num!エラーになるはずですからね。

「日付のように見える文字列」をタイプすると自動的に日付シリア
ル値に変換されますし、「日付のように見える文字列」を四則演算
に使っても日付シリアル値に変換して使用されます。datevalue関数
は使わず、もしも文字列の混入があり得るのならdatedif(A1*1,...
のように変換してしまうのが安全でしょう。

ついでにいうとdatedif関数は日付シリアル値の時刻相当部分を無視
するので、trunc関数も不要です。

この回答への補足

回答ありがとう御座います
そうなんですね。自動的に日付になりますね。
でも最初に作ったファイルはいけてるんですよ?
truncもなくてもいけますね。
結論
=DATEDIF((H3),(NOW()),"Y")
でいけました、これでいいわけですね?

補足日時:2010/04/09 11:39
    • good
    • 0

回答No2です。

エラーの原因は先に行っていたシートでは文字列として日付が入力されていましたが、新しいシートでは生年月日がシリアル数、すなわち数値として入力されていることによるものです。
シリアル数になっているデータにDATEVALUE関数を使った場合にはエラー表示されます。

この回答への補足

わかりました、了解です。
ありがとうございました。

補足日時:2010/04/09 11:43
    • good
    • 0

正しく表示できた時はA1の日付を文字列で入れてあり、駄目な時はシリアル値になっていると思われます。


シリアル値の時はDATEVALUE(A1)ではなく、単にA1 でいけるかと。

この回答への補足

皆さん回答ありがとう御座います。
そうですね、単にA1でいけました。
でも最初のファイルは何故シリアルなのに表示されるのでしょうか?

補足日時:2010/04/09 11:35
    • good
    • 0

DATEVALUE()  関数は、 日付を表現している "文字列" を基に



シリアル値 を求める機能があります。


#VALUE!となっているファイルの セルA1 が 文字列ではなく、

既に日付形式(シリアル値)になっていると思われます。

もし、セルA1が 日付形式になっているのであれば、
先頭に アポストロフィ を付加してみてください。

例.
2010/04/09   が入力されているならば、

'2010/04/09   としてみる。




※DATEDIF関数
http://kokoro.kir.jp/excel/datedif.html

この回答への補足

回答ありがとうございます。
あれれ、そうなんですか?
でも最初に作ったファイル(年齢表示されるファイル)は文字列で入れてないのに認識してるんですよ。
で、今回の質問のファイルにアポストロフィーを付けたら表示されました。

補足日時:2010/04/09 11:32
    • good
    • 0

DATEVALUE関数は文字列として生年月日が入力さてている場合に日付に直す関数です。

通常は生年月日が1980/4/9と入力すれば日付の数値として認識され文字列とは認識されません。また、TRUNC関数も正常な使い方ではないでしょう。
次のような式にしてはいかがでしょう。
=DATEDIF(A1,TODAY(),"Y")

この回答への補足

早速にありがとうございます。
そうなんですか?
TRUNC関数は正常な使い方ではないんですか?
やはり=DATEDIF(A1,TODAY(),"Y")が正解なんですね。

補足日時:2010/04/09 11:28
    • good
    • 0

DATEDIF って なんですか?


私の環境(ex2007)には含まれてませんけど??
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!