『if関数で10:00以上の値の際に適当な値が返らない』(勤怠ムリ)
よろしくお願いいたします。
過去ログ検索でも適当なワードを考えられなく、希望する回答が得られなかった為、回答又は、適当なスレをご教示いただけますと幸いです。
以下の関数
=IFERROR(IF(VLOOKUP(B15,勤務時間明細表!$B$1:$AF$372,19,FALSE)>="7:30","7:30",VLOOKUP(B15,勤務時間明細表!$B$1:$AF$372,19,FALSE)),"")
を設定した際に、9:59までは問題無く動作致しますが、10:00以降の時間になると、そのままの時間が表示されます(10:21の場合に7:30ではなく10:21と表示される)。
時間の後に*1と入力すると問題解決したかに見えて、7:29以下の際にも7:30と表示されてしまいます。
これの解決方法をよろしくお願いいたします。
ご不明な点がございましたら、お申し付けください。
< 使用 Excel:Excel2021、使用 OS:Windows11 >
=IFERROR(MIN(Time(7,30,0),VLOOKUP(B15,勤務時間明細表!$B$1:$AF$372,19,FALSE)),"") みたいなことではどうでしょうか。 (xyz) 2025/05/13(火) 17:02:10
文字列比較になっているのが原因でしょうね。 私の案についても、VLOOKUPで表引きしたものが日付型になっていないとNGかもしれません。 (xyz) 2025/05/13(火) 17:07:16
xyz様
ご返信ありがとうございます。
試してみましたが、10:00以上は問題なく動作致しましたが、7:30を割るものについては7:30と表示されます。
(勤怠ムリ) 2025/05/13(火) 17:19:58
7:30分を割るもの、というのが文字列になっていないでしょうか。
(xyz) 2025/05/13(火) 19:04:56
(?) 2025/05/13(火) 20:06:42
皆様
ご返信ありがとうございました。
vlookupで持ってきた数字をvalue関数に掛けて、そこを参照するようにした所、概ね、目指していた挙動をするようになりました。全ての検証はまだやっておりませんが、これで問題無いハズです。
また、ダメそうでしたらご相談させて頂くかもしれませんが、その際はよろしくお願いいたします。
(勤怠ムリ) 2025/05/13(火) 20:18:34
表引き結果が、文字列と日付型が混在しているなら、統一したほうがよいと思います。 もし自動判別するとすれば、下記でしょうか。
=LET( a,VLOOKUP(B15,勤務時間明細表!$B$1:$AF$372,19,FALSE), IFERROR(MIN(Time(7,30,0),IF(ISTEXT(a),TIMEVALUE(a),a)),"") ) 数式の1文字目のスペースは採ってください。
(xyz) 2025/05/13(火) 20:28:58
VLOOKUPの戻り値が、文字列でもシリアル値でも 結果はシリアル値になりました。
=IFERROR(MIN("7:30",VLOOKUP(B15,勤務時間明細表!$B$1:$AF$372,19,FALSE)),"") (かんたんレシピ) 2025/05/13(火) 21:18:42
かんたんレシピさん、確認しました。ありがとうございます。
・= "7:30" < "10:00" は文字列の比較なので Falseとなる。(これは直ぐに分かりました)
・"7:30" と "10:00" を A1 ,B1に入れて(セル書式は文字列とします) =MIN(A1,B1) とすると 0 が返る 【数値を表すものが入ったセル範囲でないと数値と扱われない】
・=MIN("7:30","10:00") は正常に7:30を返す。【数値を表す文字列は、数値として扱われる】 ということで、かんたんレシピさんの結論になるわけですね。
# Excel君がどこまで気を回してくれるかは直感ではわからないですね。 # その都度調べないと即断はできないですね。
(xyz) 2025/05/14(水) 09:52:20
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.