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同様に「型」を意識して数式を作る必要がありますので、算出結果がおかしな時には、「型」を確認するといいのかもしれませんね。