プロが教えるわが家の防犯対策術!

A1セルのTODAYの日付よりもG4セルの日付の方が大きい(後の日付)ならばG4セルの日付をそのまま持ってきて、
G4セルの数字の方が小さい(前の日付)ならば一行下がってG5セルの日付を持ってきて、という関数を入れています。
同様に、次の日付もTODAYより前であればその次と、偽の場合にさらにIF関数を入れています。

G列の日付を手入力すると値がうまく反映されるのですが、D,E,F列の値を間に/を入れて&でつなぐとうまくいかなくなってしまいます。
どこが問題でしょうか?

入力している関数は以下です。

【B1セル】
=TODAY()

【B4セル】
=IF(B1<J4,J4,IF(B1<J5,J5,IF(B1<J6,J6,IF(B1<J7,J7,IF(B1<J8,J8,IF(B1<J9,J9,IF(B1<J10,J10,IF(B1<J11,J11,IF(B1<J12,J12,IF(B1<J13,J13,IF(B1<J14,J14,J15)))))))))))

【J4セル】
==G4&"/"&H4&"/"&I4(以下同)

「IF関数」の質問画像

A 回答 (3件)

こんにちは



日付の前後(=大小)を比較しようとするなら、シリアル値(=エクセルの日付型の値)で比較するのが便利です。

一方で、ご提示の【J4セル】の式は、文字を連結しただけのものなので、(見た目は日付ですが)単なる文字列になっています。
日付型にしたければ
 =DATE(G4,H4,I4)
のような関数式にしておく必要があります。
あるいは、ご提示の式を利用するなら、
 =(G4&"/"&H4&"/"&I4)*1
とかでも可能です。


その上で、G列の日付が必ず昇順に並んでいると仮定しても良いのなら、B4セルの関数もIFの何重ものネストをする必要はありません。
 =INDEX(J4:J15,MATCH(B1,J4:J15,1)+1)
で算出可能と思います。

必ずしも昇順になっているとは限らないのであれば、
 =AGGREGATE(15,6,J4:J15/(B1<J4:J15),1)
としておくことで算出可能と思います。

※ 該当日が見つからない場合は、どちらの式もエラー表示になります。
    • good
    • 1
この回答へのお礼

ありがとうございます!無事反映できました!

お礼日時:2024/02/01 12:02

> D,E,F列の値を間に/を入れて&でつなぐとうまくいかなく…


それが、「日付」ではないからです。
    • good
    • 1
この回答へのお礼

ありがとうございました!

お礼日時:2024/02/01 12:03

J4セルで文字列の結合をしただけでは、


「見た目」がひづけに見えてるだけで、
実際は「文字列」であるから、
比較判定がエラーになるのでしょう。

J4セルの書式を日付にするとか、TODATE関数で、
日付型にしてみましょう。
    • good
    • 1
この回答へのお礼

ありがとうございました!

お礼日時:2024/02/01 12:03

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

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


このQ&Aを見た人がよく見るQ&A