お世話になります。
EXCELの時間の計算方法について質問させていただきます。
下記のように1日の従業員の作業状況を求めるEXCELを作成しています。
A1・・作業時間 (表示形式"時刻") 例 3:00:00(3時間)
B1・・空き時間 (表示形式"時刻") 例 4:00:00(4時間)
C1=A1-B1でその日の従業員の空時間の多い、少ないを求めています。
C1 (表示形式"時刻") の結果がプラスの場合は良いのですがマイナスの場合は#####となってしまいます。これを防ぐ良い方法はありますでしょうか。
どなたかお知恵をお借りできませんでしょうか。
よろしくお願い致します。
環境 Windows XP SP3 EXCEL2003
No.4ベストアンサー
- 回答日時:
こんばんは。
エクセルは負の時間数を問題なく扱えますが、ふつーの設定では表示ができません。
ツールメニューのオプションの計算方法タブで「1904年」のチェックを入れておくと、負の時間も###にならずに表示されるようにできます。
ただし、既に生データで「日付」を記入してあるエクセルブックでこの設定を触ると、「記入済みの日付が」4年と1日ずれた日付に変わってしまうので注意が必要です。先にチェックを入れたブックに、あとから日付時刻を記入して使う分には支障ありません。
同様にチェックを入れたブックと入れてない(通常設定の)ブックを混在して使っていると、間違いの元なのでそちらも注意してください。
keituinさん、いつも素早いご連絡をいただきまして誠にありがとうございます。
またお返事が遅くなりまして申し訳ございません。
ご教授いただきました方法で解決できました!
本当にありがとうございます!!
日付のズレに関しましても他のExcelから参照するようなこともなさそうなので、
この方法で素早く解決できました。
本当にいつもありがとうございますm(__)m
No.10
- 回答日時:
C列をコピーしてC列に挿入すると、C列が#REF!に、D列が正常値になるとおもいます。
C1=A1-B1
D1=IF(COUNT(A1:B1)<>2,"",IF(C1<0,TEXT(ABS(C1),"-"&"h:mm:ss"),TEXT(C1,"h:mm:ss")))
にして、下にオートフィルします。
もちろんC列には"####"が表示されますが、D列は希望通りに表示されます。
C10=SUM(C1:C9)
D10=IF(C10="","",IF(C10<0,TEXT(ABS(C10),"-"&"h:mm:ss"),TEXT(C10,"h:mm:ss")))
にすると、合計を表示します。
この状態でC列を"表示しない"に設定します。
C列非表示がいやなら、作業列を離れた列にすればいい。
計算できるためには数値である必要があります。
つまり、時刻の書式設定で-を表さなければならない。
やり方を回答してくれた人がいます。
その人もそうですが、私も使いません。
basic_ggnさん、ご連絡誠にありがとうございます。
またお返事が遅くなりまして申し訳ございません。
他の方からご教授いただきました[2004年9月から計算する]方法で解決いたしました。
この度は細かなご説明を添えていただきまして本当にありがとうございます。
そもそもの[考え方]についても勉強させていただきました。
ありがとうございました。
No.9
- 回答日時:
セルの表示形式を時刻(h:mm:ss)にしている場合、
=IF(A1<B1,TEXT(B1-A1,"-h:mm:ss"),A1-B1)
と言う式を書く。
このままでは、A1の方が大きい場合は、そのまま時刻で表示されるので、右揃えで表示されるが、A1の方が小さい場合は、マイナス記号が付いて文字列として表示されるので、左揃えで表示される。
値によって右揃えになったり左揃えになったりしては困るので、セルの表示を「右揃え」にする。
セルの表示形式を「h:mm」などの秒無しに変えた場合は、式の中の「h:mm:ss」の部分を、表示形式に合わせて変更すること。
chie65535さん、ご連絡誠にありがとうございます。
またお返事が遅くなりまして申し訳ございません。
他の方からご教授いただきました[2004年9月から計算する]方法で解決いたしました。
表示形式を時刻(h:mm:ss)にする際のテクニックとして大変勉強になりました。
ありがとうございました。
No.8
- 回答日時:
セルの書式が時刻関係のものに設定されているとき、マイナスの時間は、皆さんのおっしゃっているとおり、表示することができません。
(その書式では表示ができないだけで、実は正しい値を計算できてはいるのですが)対処法としては、(1)時刻関係でないセルの書式に切り替える、(2)マイナスを回避する数式を書く、(3)マイナスの符号を付加した文字列を力ずくで合成する、といった工夫をするということになろうかと思います。
(1)
例えばセルの書式として「数値」を選び、「小数点以下の桁数」を適当な値に設定。次式により C1 セルには「-0.50000」(時間)が得られます。
A1 3:30
B1 4:00
C1 =24*(a1-b1)
以下では、例えば C1 セルの書式として「ユーザー定義」の「h:mm:ss」を設定するとしましょう。
(2)-1
マイナスになる場合は「0:00:00」と表示
C1 =max(,a1-b1)
(2)-2
マイナスになる場合は「-」という 1 文字を表示
C1 =if(a1<b1,"-",a1-b1)
以下では、C1 セルの書式は何でも構いません。
(3)
マイナスになる場合は時刻を表す文字列の先頭に力ずくで「-」の符号を付加
C1 =if(a1<b1,"-",)&text(abs(a1-b1),"h:mm:ss")
MarcoRossiltalyさん、ご連絡誠にありがとうございます。
またお返事が遅くなりまして申し訳ございません。
他の方からご教授いただきました[2004年9月から計算する]方法で解決いたしました。
今回は様々な方法(考え方)をご教授いただきまして本当にありがとうございました!今後Excelを使用していくうえでの知識として頭に叩き込んでおきたいと思います!
ありがとうございました。
No.7
- 回答日時:
ANo.5様の御回答に捕捉させて頂きます。
>休息時間>作業時間の場合は、どちらかの数値が間違っている!
「休息時間>作業時間」という事でしたら確かに間違っていますが、本件の質問内容は、「休息時間>作業時間」ではなく、「空き時間>作業時間」の場合に関する事ですから、間違ってはいないと思います。(休息時間と空き時間は異なります)
No.6
- 回答日時:
>しかしこれですと表示は####になりませんが文字列なので集計ができず不効率で困っています。
> =IF(A1-B1<0,TEXT(ABS(A1-B1),"-"&"h:mm:ss"),TEXT(A1-B1,"h:mm:ss"))
マイナスの時間も集計しなければならないという事ですね。
それでしたら、適当な列を作業列として使用して、その作業列の値を集計すれば良いと思います。
作業列の結果が表示されているのが見えてしまいますと見苦しくなりますので、適当な未使用のシート上の列を作業列として使用します。
今仮に、A列とB列に元データを入力するシートがSheet1であり、Sheet2のA列を作業列として使用するものとします。
まず、Sheet2のA1セルに次の関数を入力して下さい。
=IF(AND(COUNT(Sheet1!$A1,Sheet1!$B1)=2,Sheet1!$A1>=0,Sheet1!$B1>=0),Sheet1!$A1-Sheet1!$B1,"")
或いは
=IF(AND(COUNT(INDEX(Sheet1!$A:$A,ROW()),INDEX(Sheet1!$B:$B,ROW()))=2,INDEX(Sheet1!$A:$A,ROW())>=0,INDEX(Sheet1!$B:$B,ROW())>=0),INDEX(Sheet1!$A:$A,ROW())-INDEX(Sheet1!$B:$B,ROW()),"")
次に、Sheet2のA1セルをコピーして、Sheet2のA2以下に貼り付けて下さい。
これで、Sheet1のA列とB列の両方に時刻が入力されている場合には、「[作業時間]-[空き時間]」に相当する数値が表示され、それ以外の場合には、Sheet2のA列には何も表示されません。
次に、Sheet1のC1セルに次の関数を入力して下さい。
=IF(ISNUMBER(Sheet2!$A1),IF(Sheet2!$A1<0,"-","")&TEXT(ABS(Sheet2!$A1),"[hh]:mm:ss"),"")
或いは
=IF(ISNUMBER(INDEX(Sheet2!$A:$A,ROW())),IF(INDEX(Sheet2!$A:$A,ROW())<0,"-","")&TEXT(ABS(INDEX(Sheet2!$A:$A,ROW())),"[hh]:mm:ss"),"")
次に、Sheet1のC1セルをコピーして、Sheet1のC2以下に貼り付けて下さい。
そして、Sheet1のC列の値を集計するのではなく、Sheet2のA列の値を集計するようにしますと、マイナスの値も集計に加える事が出来ます。
尚、Sheet2のA列の書式設定の表示形式は、[標準]のままとした方が、表示が####とならずに済むため見やすくなりますが、表示形式を[時刻]として、マイナスの数値が####という表示となっているままであっても、表示が見えないだけで、そのまま集計する事は可能です。
kagakusukiさん、ご連絡誠にありがとうございます。
またお返事が遅くなりまして申し訳ございません。
他の方からご教授いただきました[2004年9月から計算する]方法で解決いたしました。
今回は細かなロジックまでご教授いただきまして本当にありがとうございました!
すごいロジックですね!
ただ、今の私にはすぐに理解するには少し難しくてまだ試しておりませんが(申し訳ございません)、一度家に帰ってからじっくり考えて意味を理解したうえで試させていただきたいと思います!
今後の知識として頭に叩き込んでおきたいと思います。
この度は本当にありがとうございました!
No.5
- 回答日時:
そのケース、時間数と時間数、2つの引き算は、純粋に算術的に考えるしかない。
それぞれが論理的に妥当な数値か、確認したうえで計算するしかない。
休息時間>作業時間の場合は、どちらかの数値が間違っている!(=の場合も同じようなもの?)
どちらが間違っているのかは断定できないので両方を確認することになる。
ここからは余談、
上に出てくる作業時間の計算でも、日付またがりの勤務時間帯があると、その計算は厄介?そうに思えるが、しかし、これは意外と簡単!、
A1:出社時刻
B1:退社時刻
C1:休息時間」
24時間表記で値の代償考えずに、論理的に組み立てた引き算に、「1」すなわち、24Hr(=1日)を補正する、これだけ、、、ホントかいな???、、、
作業時間=((B1-A1)-C1)+1
JazzCorpさん、ご連絡誠にありがとうございます。
またお返事が遅くなりまして申し訳ございません。
今回は他の方からご教授いただきました[2004年9月から計算する]方法で解決いたしました。
数式もそうですが[考え方]について勉強させていただきました。
奥が深いですね!継続的に勉強に励んでいきたいと思います!
この度は本当にありがとうございました!
No.3
- 回答日時:
Excelではマイナスの時間やマイナスの日付というものは扱えませんので、計算結果がマイナスの場合には#の繰り返しが表示されるだけとなります。
ですから、計算結果がマイナスの場合には、時間が表示されない様に関数を工夫しなくてはなりません。
=IF(AND(ISNUMBER(TEXT($A1,"h:m:s")+0),ISNUMBER(TEXT($B1,"h:m:s")+0),$A1>$B1),$A1-$B1,"")
No.2
- 回答日時:
エクセルの時間表示は、
あくまでも年月の一部としての時間なので”負”という概念がありません。
皆さんお悩みのようで、okwaveの過去の質問にもあります。
例えば
http://oshiete.goo.ne.jp/qa/7790142.html
http://oshiete.goo.ne.jp/qa/7067806.html
webで検索してみてください。
shintaro-2pさん、ご連絡誠にありがとうございます。
またお返事が遅くなりまして申し訳ございません。
今回は他の方からご教授いただきました[2004年9月から計算する]方法で解決いたしました。
参考URLをご提示いただきまして誠にありがとうございます。
過去にも同じように頭を悩ませていた方がたくさんいらっしゃったのですね・・
自分での調査も足りなかった気がします(反省)・・
この度は本当にありがとうございました!
No.1
- 回答日時:
単純にセルの幅が足りないのではないかと。
一文字分程セルの幅を広げてみてはどうでしょうか。
この回答への補足
big_eggさん、早速のご連絡ありがとうございます。
セルの幅を10cm以上広げましたが同じでした・・。
ちなみにC1には####対策のために以下のような数式を埋め込んで文字列にして場をしのでいいます。
しかしこれですと表示は####になりませんが文字列なので集計ができず不効率で困っています。
=IF(A1-B1<0,TEXT(ABS(A1-B1),"-"&"h:mm:ss"),TEXT(A1-B1,"h:mm:ss"))
bi_eggさん、お返事が遅くなりまして申し訳ございません。
今回は他の方からご教授いただきました[2004年9月から計算する]方法で解決いたしました。
この度はお早いご連絡をいただきましたこと大変感謝いたします。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルVBAでセルに表示されているとおりの数値を取得したい(時間の計算結果) 1 2022/03/30 17:52
- Excel(エクセル) Excel表示形式 2 2022/09/09 09:57
- Excel(エクセル) 至急です><Excelの関数を教えてください。 2 2022/03/22 17:56
- Excel(エクセル) 隣り合っていないセルを まとめて税込表示したい 8 2022/09/25 14:32
- Excel(エクセル) Excel 時間の引き算でマイナスを表示させることは出来ますか 3 2023/06/14 21:54
- Excel(エクセル) 時間差を求めるマクロコードを教えてください。 4 2022/05/17 18:22
- Excel(エクセル) TEXT関数(負の値)を集計のため数値に変換したい 5 2022/05/15 23:04
- Excel(エクセル) エクセルの関数に関しての質問です。 5 2022/10/07 11:17
- その他(Microsoft Office) IF関数について教えてください 2 2022/05/10 13:31
- Excel(エクセル) Excel 数式を教えてください 2 2022/06/02 12:24
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelにいついて質問です。
-
【スプレッドシート】指定の日...
-
エクセルVBA ”型が一致しませ...
-
SUMIFとCOUNTIFを合わせたよう...
-
エクセルで日付を数字+アルフ...
-
通話時間表示をそろえて計算したい
-
エクセル2010で合計5000に近い...
-
エクセルで年月の合計の関数を...
-
EXCEL 経過年数の平均を求めた...
-
(条件付書式)EXCELで土日の行...
-
vbaで「/」を削除したい
-
ある一定時間を超えた場合の超...
-
VBAで条件付き書式を設定
-
エクセルにて「週」から日付を...
-
エクセルで角度の計算できますか?
-
Excel:月またぎを含む日数の差...
-
隣のセルに入力したら自動的に...
-
時間帯ごとの集計をしたいがエ...
-
エクセルでの複数条件下での標...
-
excelでの文字を隠す方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SUMIFとCOUNTIFを合わせたよう...
-
エクセルでの複数条件下での標...
-
ある一定時間を超えた場合の超...
-
エクセルで年月の合計の関数を...
-
【スプレッドシート】指定の日...
-
EXCEL 経過年数の平均を求めた...
-
エクセルで日付を数字+アルフ...
-
Excelにいついて質問です。
-
エクセルにて「週」から日付を...
-
Excelの表以外が暗い?
-
エクセルで「ぶら下げ」書式を...
-
エクセルで角度の計算できますか?
-
隣のセルに入力したら自動的に...
-
エクセルで、一つのセルに二つ...
-
EXCEL 年月表示をするVBAを教...
-
excelでの文字を隠す方法
-
エクセル2003 MONTH関数で
-
Excel:月またぎを含む日数の差...
-
SUMIF関数の結果が0になってし...
-
エクセル シフト表 6連続勤...
おすすめ情報