2/16/2020

Excel。時間の条件分岐はTIMEVALUE関数を使うのが便利です。【TIMEVALUE】

Excel。時間の条件分岐はTIMEVALUE関数を使うのが便利です。

<TIMEVALUE関数>

作業時間が、時間以内に終了しているならば、「○」時間を超過しているならば、「タイムオーバー」というような判断分岐をする場合、意外と落とし穴があるので確認しておきましょう。

次の表を用意しました

D列の所要時間は、終了時間から開始時間を減算した結果を表示してあります。
数式は、
=C2-B2
ですね。

時間以内に終了しているならば、「○」時間を超過しているならば、「タイムオーバー」という判断分岐をしたいので、当然IF関数を使うわけですね。

0:50を超過していたらということを論理式に設定しますので、
D2<=0:50
と設定してみると、正しくありませんと表示されてしまいます。

一応、OKボタンをクリックしてみると、

問題があると、冷たい反応…
どうやら文字として認識しようとしています。

では、次のように数式を修正してみるとどうでしょうか?

論理式を、
D2<="0:50"
としました。「”(ダブルコーテーション)」で0:50を囲んでみました。

今度は、うまくいきそうな感じがしますので、OKボタンをクリックして、数式をオートフィルでコピーしてみましょう。

成功したと思ったら、なんと、50分オーバーしているところも「○」が表示されてしまっています。

どうしてでしょう?

ここに落とし穴があるわけです。

そもそも、時間通しを減算していますので、算出されているD列の値は、時間なわけです。

Excelは、1日を1としたシリアル値を使っていますから、例えばExcelで1時間は1/24ということになります。

今回算出されているD列も、表示形式を標準にしてみましょう。

1以下なのが本来の姿です。

そして、”0:50”としたことで、文字列になっています。

文字と数値では数値の方が文字コード上小さいので、IF関数の結果、すべて「○」になってしまったわけです。

【TIMEVALUE関数を使うと問題解決】

問題なのは、文字型なのと時刻型という「型」が異なっているのが原因です。

そこで、TIMEVALUE関数を使うと、時刻型とすることができるので、問題を解決することができます。

では、IF関数を修正していきます。

論理式を次のようにTIMEVALUE関数を使って修正します。
D2<=TIMEVALUE("0:50")

OKボタンをクリックしたら、オートフィルで数式をコピーしましょう。

今回は、50分超過しているデータは、「タイムオーバー」と表示されていることが確認できました。

今回のように、日付や時間を使うときには、Excelであっても、Access同様に「型」を意識して数式を作る必要がありますので、算出結果がおかしな時には、「型」を確認するといいのかもしれませんね。