• ベストアンサー

TIMEVALUEと"時刻"の違いを知りたいです

エクセルで残業時間を計算しています。    A     B     1 退社時間 残業時間   2  20:00   ? という表があり退社時間が 18:00を過ぎた場合→残業時間を求める 18:00を超えない場合→0を表示させる というようになっています。 実は既に関数は組まれており =IF(A2>TIMEVALUE("18:00"),A2-"18:00",0) という関数がB2には入っています。 そこで質問なのですが このIF関数中の論理式 「A2>TIMEVALUE("18:00")」の意味は分かるのですが、 真の場合は「A2-"18:00"」なぜこれだけで答えがでるのでしょうか? 17:30を""で囲むだけでシリアル値に戻してくれるのでしょうか? だったら、論理式の「A2>TIMEVALUE("18:00")」中にTIMEVALUEは いらないのではないでしょうか? と思い、論理式のTIMEVALUEを「A2>"18:00"」に置き換えてみたのですが答えはでませんでした・・・ 「TIMEVALUE」と「時刻をダブルクォーテーションで囲む」 違いを教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.3

TIMEVALUE,DATEVALUEは、文字列の時刻・日付をシリアル値に変換する関数です。 ただし、EXCELの機能として、四則演算の場合に限り 文字列の数値を数値として扱う補助機能があります。 本来は A2-TIMEVALUE("18:00") としなくてはいけないものを A2-"18:00" で同じ結果を返します。 A2>"18:00"*1 も上記の四則演算を使ったシリアル値変換方法ですね。

sa0u0yu
質問者

お礼

返事が遅くなり申し訳ございません。 *1の方法も知りませんでした。 勉強になります。 ありがとうございました。

その他の回答 (3)

  • wisemac21
  • ベストアンサー率39% (171/429)
回答No.4

日付/時刻の表示形式の書式で表示されたものをダブルクォーテーションで囲んだ「文字列」を数式や関数の中で「算術演算子」との組み合わせで使用すると、その文字列を日付/時刻のシリアル値として計算できます。 算術演算子には+,-,/,*,^,%などがあります。 シリアル値を意識すること計算できるようにしているわけです。 また、A2>"18:00"のような論理式で使う比較演算子(>,<,=,>=,<=,<>)との組み合わせでは「文字列」としか扱えませんので、"18:00"*1として算術演算子を使って計算させてシリアル値にしています。 このような文字列を計算出来るものに下記のようなものもあります。 =\150-\100 は計算出来ませんが ="\150"-"\100" は50が返ります。

sa0u0yu
質問者

お礼

返事が遅くなり申し訳ございません。 文字列を計算することができるんですね!? 全く知りませんでした・・・。 勉強になります。 お答えありがとうございました。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

演算子の機能の違いではないいかと思います。 比較演算子(>,=,<等)は、数値・文字列を特定できないので日付・時刻書式は文字列としか取扱わない。 算術演算子(+,-,*,/)は、数値に特定できるので日付・時刻書式の場合にはシリアル値に自動読替えする。 因みに次の方法でシリアル値に変換できますのでお試し下さい。 =IF(A2>"18:00"*1,A2-"18:00",0)又は、=MAX(A2-"18:00",0)

sa0u0yu
質問者

お礼

返事が遅くなり申し訳ございません。 比較演算子と算術演算子の違い、 今回のことでよく勉強になりました。 ありがとうございます。

回答No.1

A2>"18:00"じゃぁ、A2の値と文字列としての18:00を比較してしまい ます。「四則演算の中に時刻に見える文字列があれば」時刻として 扱うというのが、Excelの余計なお世話機能の一つです。ここは 「A2>"18:00"*1」とするのがセオリーですね。

sa0u0yu
質問者

お礼

返事が遅くなり申し訳ございません。 エクセルに文字列をも計算する機能があるとは知りませんでした。 勉強になりました。 ありがとうございました。

関連するQ&A