dポイントプレゼントキャンペーン実施中!

D1セルでMAX関数を用いて、A1, B1, C1セルのいずれかの日付のうち最新の日付を返したいとします。
D1=MAX(A1:C1)
サンプルとして、A1,B1,C1に架空の日付を直接入力した際は、D1に最新の日付が返ってきました。
Use Caseとしては、A1~C1すべてに日付が入ってる場合もあれば、いずれかの場合もあれば、いずれも空白の場合もあります。このサンプル段階では、いずれのケースで試しても、ちゃんと最新の日付が返ってきましたし、すべて空白の場合はD1も空白でした。

しかし、実際のレポートでは、A1,B1,C1セルはVlookupで別のシートから日付を取得する設計で、その場合はD1に=MAX(A1:C1)と入れても何も値が返ってきませんでした。例えばVlookupでA1には日付が返ってきていて、B1は""、C1も""の場合、D1にはA1の日付が表示されて欲しいのですが、空白表示のままです。試しにB1に架空の日付を手入力したら、その日付がD1に表示されました(A1を認識してない感じ)。
説明が難しいのですが、こういった現象がある場合、原因としてどのようなことが考えられますでしょうか?ご教授いただければ幸いです。
サンプルではうまくいって、本番環境でうまくいかないので困っています・・・
補足情報が必要な場合はお知らせください。
どうぞ宜しくお願いします。

質問者からの補足コメント

  • 早速に大変ありがとうございます。
    ご指摘のとおりで、D1の書式設定はユーザー定義でyyyy/m/d;;
    としています(どなたかの別スレッドで拝見してそのようにしました)。

    A1,B1, C1はそれぞれ日付設定で、Vlookupの式は以下のようなものです。
    =IFERROR(VLOOKUP(B16&$V$6,受講状況!D:E,2,FALSE),"")
    例えば、B16が受講者名で、V6に研修名が入っており、その2つを結合させた内容が
    「受講状況」シートD列に、同シートE列に受講日が入っていて、その日付が返ってくるようになっています。

    No.2の回答に寄せられた補足コメントです。 補足日時:2016/02/15 17:30

A 回答 (5件)

こんばんは!



すでに回答があるように"/"でつないだ場合は文字列になると思います。

>=VLOOKUP(B2,Training一覧!A:E,3,FALSE)&"/"&VLOOKUP(B2,Training一覧!A:E,4,FALSE)&"/"&VLOOKUP(B2,Training一覧!A:E,5,FALSE)
という数式を

>=DATE(VLOOKUP(B2,Training一覧!A:E,3,FALSE),VLOOKUP(B2,Training一覧!A:E,4,FALSE),VLOOKUP(B2,Training一覧!A:E,5,FALSE))

とし、シリアル値にしたらどうなりますか?

※ 未検証ですので、
改善されなかったらごめんなさい。m(_ _)m
    • good
    • 1
この回答へのお礼

=Date関数を使ってみたろ、問題が解決しました。実現したかった「最新の日付を返す」ことができました。アドバイス大変ありがとうございました。

お礼日時:2016/02/16 10:31

>Training一覧にある「年」「月」「日」を"/"で結合して日付化してるのですが、これがご指摘の「文字列になっている」ということと同義でしょうか?


「&」で結合したら、文字列になります。

この場合の解決方法がNo.1の回答に示されています。
>>=Vlookup(検索値,範囲,列番号,検索の型)*1
この「*1」がそれです。

Excelでは文字列で記述された「数値と見なせる値」に「0(ゼロ)」を加減算したり「1」を乗除算すると文字列から数値に変わると言うものです。

="20"&"16"
は、"2016"という文字列ですが、
=("20"&"16")*1
は、2016と言う数値になります。

="平成27年"&"2月"&"15日"
は文字列になりますが、
=("平成27年"&"2月"&"15日")*1
は日付を示す数値(シリアル値)になります。
    • good
    • 0
この回答へのお礼

=Date関数を使ってみたろ、問題が解決しました。実現したかった「最新の日付を返す」ことができました。ご教授いただいた内容、今後に活かしていきます。大変ありがとうござました。

お礼日時:2016/02/16 10:24

No.1の方へのコメントを拝見しました。



=VLOOKUP(B2,Training一覧!A:E,3,FALSE)&"/"&VLOOKUP(B2,Training一覧!A:E,4,FALSE)&"/"&VLOOKUP(B2,Training一覧!A:E,5,FALSE)

この検索値B2には何が入っていますか?
同じ検索値で年月日それぞれは取得できないと思います。

B2の内容と
Training一覧! のA列からE列の内容を書いて下さい。

データの持ち方がまずいのだと思いますが、現状をきちんと把握しないと修正方法を回答できないので、よろしくお願いします。
    • good
    • 0
この回答へのお礼

お返事が遅くなり大変申し訳ありません。B2の内容とTraining一覧!のA列からE列の内容をお知らせしようと準備をしてるところに、他の方から"/"が原因で文字列と認識しているとのご指摘賜り、一旦=Date関数を使ってみたろ、問題が解決しました。実現したかった「最新の日付を返す」ことができました。サポート本当に有難うございました。

お礼日時:2016/02/16 10:22

A1,B1,C1 それぞれのVLOOKUPの式と


D1セルの書式設定を明確にすれば解決するのではと思います。

>すべて空白の場合はD1も空白でした。
ここが疑問です。
D1に何か書式の設定がないのであれば、A1,B1,C1が全て空白の場合、
=MAX(A1:C1) は0になるはずなのです。
日付の設定がしてあったも、1900/1/0で空白にはならないので。
この回答への補足あり
    • good
    • 0
この回答へのお礼

有難うございます。掲示板の使い方がよく分かっておらず、自身の質問欄の補足コメントとしてレスしてしまい失礼しました。

お礼日時:2016/02/15 17:34

根本的に元データの日付がシリアル値ではなく文字列になっていると思われます。


または
=Vlookup(検索値,範囲,列番号,検索の型)&""
になっているとか?
=Vlookup(検索値,範囲,列番号,検索の型)
にしてみるとか? もっと能動的に
=Vlookup(検索値,範囲,列番号,検索の型)*1
    • good
    • 0
この回答へのお礼

ありがとうございます。
質問の補足コメントとしてVlookの式を掲載させていただきましたが、
=IFERROR(VLOOKUP(B16&$V$6,受講状況!D:E,2,FALSE),"")
のような内容です。
例えば、B16が受講者名で、V6に研修名が入っており、その2つを結合させた内容が
「受講状況」シートD列に、同シートE列に受講日が入っていて、その日付が返ってくるようになっています。

>根本的に元データの日付がシリアル値ではなく文字列になっていると思われます。

でハッしたのですが、「受講状況」シートE列にある受講日、これは書式設定で表示形式を日付に設定してるのですが、これもまた「Training一覧」という別シートにデータをLookupしてまして。。
=VLOOKUP(B2,Training一覧!A:E,3,FALSE)&"/"&VLOOKUP(B2,Training一覧!A:E,4,FALSE)&"/"&VLOOKUP(B2,Training一覧!A:E,5,FALSE)

Training一覧にある「年」「月」「日」を"/"で結合して日付化してるのですが、これがご指摘の「文字列になっている」ということと同義でしょうか?

お礼日時:2016/02/15 17:42

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

このQ&Aを見た人はこんなQ&Aも見ています