ここから本文です

IF(OR(E50="",F50=""),"",I50*HOUR(H50)+IF(AND(MINUTE(H50)>=0,MINUTE(H50)<=29),...

アバター

ID非公開さん

2016/5/1315:57:39

IF(OR(E50="",F50=""),"",I50*HOUR(H50)+IF(AND(MINUTE(H50)>=0,MINUTE(H50)<=29),0,IF(AND(MINUTE(H50)>29,MINUTE(H50)<=59),I50/2,I50)))

この式の意味を教えてください
エクセルで勤怠を

付けている表で日給を表示させるセルに入っています

閲覧数:
51
回答数:
3

違反報告

ベストアンサーに選ばれた回答

kro********さん

2016/5/1316:34:35

時間を30分単位の時間(分)にする処理と思われます。

セル H50に時間
セル I50には60が入っていると推測
E50とF50は解らないが、とりあえず何も入ってなければ表示しないし、どちらかに値が入っていれば以下の計算をする。

H50の時間を分で表示する。
但し、
0-29分は0分
30-59分は30分
それ以上は60分(これに該当する事は無いと思うけど)

  • アバター

    質問者

    ID非公開さん

    2016/5/1317:15:14

    ありがとうございます

    前任者の時代は勤怠が30分単位だったようで
    それが急に15分単位に変更してくれという指示が・・・

    出勤、退勤時刻は手入力で、これまで切り捨てていた時間を
    15分単位に正しくして入力したのですが

    そこに時給を入力されているセルをかけて出した日給が
    15分単位に反映されていなくてパニックに・・・

    これまでの30分単位から15分単位を認識してもらう式にするには
    どうしたらよいか、おわかりでしたら教えていただけないでしょうか

    ここまでで一番疑問に寄り添った回答をくださったのでベストアンサーとさせていただきました

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

was********さん

2016/5/1316:51:28

数式を例示するなら、編集状態のセル内でコピーするか、数式バーでコピーして全てを張り付けてください。
全てでないので「怪訝に」思ってしまいます。
結論としては、1時間未満の勤務時間を30分以上なら1/2時間、未満なら0時間として計算しています。
MINUTE関数が0~59の整数を返すのに、「MINUTE<0やMINUTE>59について配慮している」ところは笑っておいてください。

IF関数のネストを、実行順に見ていきましょう。
1. 外側のIF関数(未入力なら数値を返さない・・・空白)
論理式・・・OR(E50="",F50="")
真の場合・・・""
偽の場合・・・I50*HOUR(H50)+IF(AND(MINUTE(H50)>=0,MINUTE(H50)<=29),0,IF(AND(MINUTE(H50)>29,MINUTE(H50)<=59),I50/2,I50))

2. その次のIF関数(勤務時間の端数が30分未満であるか)
論理式・・・AND(MINUTE(H50)>=0,MINUTE(H50)<=29)
真の場合・・・0
偽の場合・・・IF(AND(MINUTE(H50)>29,MINUTE(H50)<=59),I50/2,I50)

3. その次のIF関数(勤務時間の端数が30分以上であるか)
論理式・・・AND(MINUTE(H50)>29,MINUTE(H50)<=59)
真の場合・・・I50/2
偽の場合・・・I50

先に書いたように3.の偽の場合は無いですから場合分けは必要ないですね。
次式にできます。
=IF(OR(E50="",F50=""),"",I50*HOUR(H50)+IF(MINUTE(H50)<30,0,I50/2))
また、I50はIF関数の外に出します。
=IF(OR(E50="",F50=""),"",I50*(HOUR(H50)+IF(MINUTE(H50)<30,0,1/2)))
次式になります。
=IF(OR(E50="",F50=""),"",I50*(HOUR(H50)+IF(MINUTE(H50)<30,0,1)/2))
IF関数で真偽で0か1を返すのは、1か0であれば真偽のままで良いので論理を逆にし、IF関数を廃します。
=IF(OR(E50="",F50=""),"",I50*(HOUR(H50)+IF(MINUTE(H50)>29,1,0)/2))
=IF(OR(E50="",F50=""),"",I50*(HOUR(H50)+(MINUTE(H50)>29)/2))

後半は今後のための参考にしていただけますか。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

プロフィール画像

カテゴリマスター

2016/5/1316:31:12

E列とF列がおそらく出勤時刻や退勤時刻でH列が実質の勤務時間、I列が時給かな。そういうのは表の見出しを見れば判ると思うので、次に質問する時は書きましょう。

で、出勤してなかったり退勤してなかったりするときに勤務時間がまともに計算できない式になってるみたいなので、そのような場合は何も計算しないで空文字列を返してしまって、まずは勤務時間の「時」の部分(8時間35分なら8)に時給をかけ算し、「分」の部分は違法な切り捨て処理をしています。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる