- ベストアンサー
エクセルで65時間超を判定する論理式
- エクセルの論理式を使用して、月間の超過勤務時間が規定の65時間を超過する場合には、超過した時間を算出し、超過していない場合にはゼロを返す方法について教えてください。
- 現在、エクセルのIF関数やTIMEVALUE関数を使用して、超過判定を試みていますがうまくいきません。おそらく、時刻表示がシリアル値となっていることが原因だと思われます。どのように対策すれば良いでしょうか?
- 条件としては、エクセルのバージョンは2002を使用しており、すべての書式が[h]"時"mm"分"と設定されています。合計値の判定はA32セルを使用しています。また、超過判定はA列の前に始業時刻、終業時刻、休憩時間が入力され、終業時刻-始業時刻-休憩時間が8時間を超えると超過時間がA列に自動入力される設定になっています。解決方法を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
次の数式をお試し下さい。 IF(A32>”65:00”*1、A32-”65:00”、0)
その他の回答 (4)
- mrsara
- ベストアンサー率18% (103/558)
うちの会社で {A始業時刻/B終業時刻/C休憩時間/D勤務時間}が表示されていて E休日フラグ/F通常時間/G残業時間/H深夜時間/I深夜残業/J休日勤務は計算用に同行に配置しています。 他に参照用にK8:00 L22:00を別なセル(場所は自由)を用意します。 ABCEIは入力しますがあとは自動計算にしています。 D1=B1-A1-C1 E1は休日手当の支給対象日に"1"を入力します F1~J1は残業手当や深夜手当、休日手当の計算用です。 F1=IF(D1<$K$1,D1,$K$1) G1=IF(D1>$K$1,D1-$K$1,0) H1=IF(B1>$L$1,B1-$L$1,0) I1は深夜残業に該当する時間数を入力 J1=IF(E1=1,D1,0) これで一通り計算できるはずです。 ちなみに1行目用です。
お礼
mrsara様 早速のご回答をありがとうございます。 mrsara様の式はキレイに上手く作成なさってますね。 我が社の勤務形態はかなり複雑で、本当に難儀しています。実際に私が作ったものを、 これから実データを入れてみれバグ探しをしなければなりません。 これからも私の手に負えない問題が発生しましたら、過去質問回答データを検索して、 それでもダメだったらまた皆さまのお知恵を拝借しなければならないでしょうか。いやになります(溜息) 私の問題は、1番目のmu2011様の式で解決いたしました。 mrsara様はじめ皆さまに本当にお世話になりました。ありがとうございました。
- imogasi
- ベストアンサー率27% (4737/17069)
こんな実験はどうですか。 B1、B2、B3の書式設定をユーザー定義の[h]:mm:ss としておく。 B3に =IF(B3>TIMEVALUE("65:00:00"),"越え","") か=IF(B3>"65:00:00"*1,"越え","") を入れておく。 B1,B2に 例えば 24:45:10 41:10:00 65:55:10 のような、足して65時間を越えるや越えないデータを色々入れて テストしてみる。 ーー ある解説書ではTIMEVALUE(LOTUS互換らしい)はいらないようにも読める解説があったが =IF(B3>"65:00:00","越え","") ではうまくいかないようだ。
お礼
imogasi様 ご回答をありがとうございました。 ご教示いただいた式と同じようなことを、素人なりにいろいろ試してみたのですが、できませんでした。 時間という連続データを、デジタル数字に変換して計算する、PCの限界なのでしょうか。 imogasi様はじめ皆さまのご回答に本当に感謝いたしております。 なお私の問題は、1番目のmu2011様にご回答いただいた式で私の問題は解決しました。
意味がよく分かりませんが =MAX(A32-"65:",0) で問題がありますか?
お礼
Chiquilin様 お忙しいところ、早速ご回答いただきましてありがとうございます。 この論理式では、A32セルから65時間を減算した値と0との最大値を返すことになるので、 必然的にA32から65時間減算した値となるのかな、と思ってます。 となると、私の困っていた時間計算の際のシリアル値の扱い方とは、やや異なるご教示となるのでしょうか。実際に私ので試算したところ、うまくいかないようです。 私の質問文がつたないせいで、状況が伝わらず、申し訳ありませんでした。 1番目に回答をお寄せいただいたmu2011様のご回答で、とりあえずは解決しました。 Chiquilin様はじめ、皆さま、ありがとうございました。
- mrsara
- ベストアンサー率18% (103/558)
別セルに参照用に65:00(A1セルとします)を用意して =if(A32>$A$1,A32-$A$1,0) これで出ますよ。
お礼
mrsara様 仕事から戻ってご回答を拝見し、試したところ、一発で解決しました。 どうもありがとうございました。 エクセルの時間計算に不慣れなもので、本当に目からうろこの 落ちる思いです。 ところで、なぜ「*1」しなければいけないのか、すごくフシギに 感じております。 他のご回答者の皆さまも、私の論理式の不等号の向きがうっかり 逆で、大変失礼しました。
補足
mrsara様 デスクに戻って慌てていたので、うっかりお礼の内容間違いをして しまいました。大変失礼しました。 ご回答1番目のmu2011様のご回答でとりあえずは解決しました。 mrsara様のやり方もこれから試してみます。 mrsara様、mu2011様、お二人への失礼をお詫びいたします。
お礼
mu2011様 仕事から戻ってご回答を拝見し、試したところ、一発で解決しました。 どうもありがとうございました。 また粗忽もので、お礼のあて先を間違えて2番目の方にしてしまい ました。ごめんなさい。 エクセルの時間計算に不慣れなもので、本当に目からうろこの 落ちる思いです。 ところで、なぜ「*1」しなければいけないのか、すごくフシギに 感じております。 他のご回答者の皆さまも、私の論理式の不等号の向きがうっかり 逆で、大変失礼しました。