• ベストアンサー

エクセル 時間管理について

・『エクセルの時間管理でA1セルの値が8時間を超えていたらB1セルの値から8時間をひく、それ以外なら0:00と表示』ということを行いたいのですが、下記のような式ではA1セルにどのような値が入っても「0:00」になってしまいます。 解決法をご教授願います。 <式> =IF(A1>"8:00",A1-"8:00","0:00") <結果> 0:00

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

=MAX(0, A1-"8:0") などのようにしてみてください。 セルの書式設定はもちろん時刻の表示形式にしておきます。 #しばしば皆さんが間違えます。 =IF(A1>"8:00" この書き方では,「8時間」との大小比較を計算できません。これでは「8時間」ではなく「8:00という4文字の文字列」との計算になっているからです。 一つのやり方としては,丁寧に =IF(A1>TIME(8,0,0) あるいはTIMEVALUE関数などを使ってちゃんと「8時間」の値と比較させると出来ます。 別のやり方としては, =IF(A1-"8:0">0, という計算式にしてもこれは計算できます。

nashiusa
質問者

お礼

お世話になります。 なるほど・・・と言いたいところなんですが正直よく理解できませんでした(;_;) 言われるがままに式を代入したらできたので「まぁいいか♪」てな感じですがww もう少し勉強して出直してきます。 丁寧な説明文も含んでいただき、ありがとうございました。

その他の回答 (4)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 Excelでは、年月や時刻は全て日数単位で計算されて、表示を行う際に、年月や時間、分、秒に変換されます。  例えば、「18:00」は1日の内の4分の3が経過した時刻ですから、表示こそ「18:00」ですが、実際に計算で扱われるデータは、数値の「0.75」なのです。  ですから、8時間を引かれる場合には、"8:00"を引くのではなく、1日の8/24である0.333333・・・・を引く必要があります。  従って、数式を以下の様されると良いと思います。 =A1-IF(A1>1/3,1/3,0) 又は、 =A1-(A1>1/3)/3 2番目の数式中の (A1>1/3) の部分は、論理式と言う判定を行うための数式で、A1>1/3が成り立っている場合には、数値の1として扱われ、成り立っていない場合には、数値の0として扱われます。  つまり、A1が8:00を超える場合には、1日の1/3(=8時間)が引かれる様になっております。  それから、上記の数式の計算結果を表示させる際には、この数式が入力されているセルの書式設定を、時刻表示を行う様に設定して下さい。  その方法は、 数式が入力されているセルを、選択   ↓ メニューの[書式]をクリック   ↓ 選択肢の中の[セル]をクリック   ↓ 現れる「セルの書式設定」ウィンドウの[表示形式]タブをクリック   ↓ 分類の欄の中にある[時刻]をクリック   ↓ 種類の欄の中にある[13:30]をクリック   ↓ [OK]ボタンをクリック すると、小数表示が時刻表示に変換されます。  尚、このままの数式では、A1セルに時間が入力されていない場合には、0が表示されますが、A1セルが未入力の場合や、数値以外のデータ(文字やエラー)が入力されている場合には、何も表示させない様にするためには、次の様な数式にされると良いと思います。 =IF(ISNUMBER(A1),A1-(A1>1/3)/3,"")

nashiusa
質問者

お礼

お世話になります。 まさか分数が必要だったとは・・・^^; 貴重なご意見ありがとうございました。

noname#111181
noname#111181
回答No.4

TIMEVALUE関数を利用し、関数式を下記のようにしてください。 =IF(A1>TIMEVALUE("8:00"),B1-TIMEVALUE("8:00"),"")

nashiusa
質問者

お礼

お世話になります。 知らない関数名が・・・(・ω・;) まだまだ勉強不足であることを実感しました。 どうもありがとうございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんにちは! 色々方法はあるかと思いますが・・・ 一例です。 表示したいセルの表示形式をユーザー定義から [h]:mm としておきます。 そのセルの数式を =IF(A1>"8:00"*1,A1-"8:00","0:00"*1) としてみてはどうでしょうか? 単純に "8:00" だけだと文字列扱いになると思います。 *1 とすることで数値扱いになるはずです。 以上、参考になれば良いのですが 他に良い方法があれば読み流してくださいね。m(__)m

nashiusa
質問者

お礼

お世話になります。 「*1」での数値化ですか・・・ まだまだ知らないことが多すぎるみたいですm(_ _)m どうもありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

ご質問の内容と式は違っているように思いますが、お示しの式は次のようにすればよいでしょう。 =IF(A1>"8:00"*1,A1-"8:00",0) なお、式の入力されたセルの表示形式はユーザー定義で[h]:mm とでもしておくことですね。 これによって0のときは0:00と表示されます。 お示しの式でしたら0:00と表示されますが、文字列の扱いとなりますので、そのセルのデータを他の計算などに使う場合にはエラーの原因になりやすくなります。

nashiusa
質問者

お礼

お世話になります。 確かにエラーが多くて嫌になっていたところですww 文字列なら確かに他の計算に数値としては参照できないですよね^^; 勉強になりました。 ありがとうございました。

関連するQ&A