- ベストアンサー
Excel IF関数の使い方
- ExcelのIF関数を使って、所定内勤務時間を自動的に計算する方法について教えてください。
- 条件によって異なる時刻を入力する場合、IF関数を使用すると便利です。
- 具体的なセルの指定と、所定内勤務時間を表示するためのIF関数の書き方を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
勤務体系詳細が不明なので、本質とずれているかもしれませんが・・・ =IF(A1="","7:45",IF(A1="半休",IF(B1=TIMEVALUE("8:30"),TIMEVALUE("3:30"),IF(B1=TIMEVALUE("12:45"),TIMEVALUE("4:15"))))) などでは、いかがでしょうか。 空白(通常)ならば終日とし、もし半休と含まれていれば、始業時間によって所定時間を変更する。 ・・・ただし、これだと8:30か12:45以外では成立しなくなるのであしからず。 対応できる幅を持たせたいならばもう少し手を加える必要があります。
その他の回答 (4)
- MarcoRossiItaly
- ベストアンサー率40% (454/1128)
労働時間の計算についてのご質問、ほんと多いですね。こうしたQAサイトでちょっと検索するだけでも、情報がたくさん出てきそうですね。 それはさておき、過去の類似のご質問を次のとおり載せますので、後でご覧になってみてください。「3.5時間」といった結果を算出する方法についても書いています。 http://okwave.jp/qa/q7434809.html >A列に何も入らなかったら終日勤務で、所定内勤務時間を7:75と表示させたいです。 私が質問者さんと同じような計算をするとしたら、未入力にはしません。入力しておけば、IF関数とか考えなくても、引き算するだけでご要望の結果が得られます。毎回同じ値を入力するというのも、コピペで貼り付ければ、それほどの負担でもないのではないかな、と。 該当データがない場合は、未入力にしたり、「-」などを入力してもいいですが、ある場合は何かしら入力したほうがデータベースとして良いのです。後でフィルタで抽出したり、他の計算に使ったりできます。 A1に始業時間、B1に終業時間が入力されているならば、次の式でO.K.です。始業・終業が午前であろうが午後であろうが、12:00?12:45を除いた正しい結果を算出するはずです。 =max(,"12:00"-a1)-max(,"12:00"-b1)+max(,b1-"12:45")-max(,a1-"12:45") 式の意味は次のとおり。 ●「max(,"12:00"-a1)」の項は、a1が12:00より早い時刻である場合のみ、差の時間を足します。 ●「-max(,"12:00"-b1)」の項は、b1が12:00より早い時刻である場合のみ、差の時間を引きます。 ●「+max(,b1-"12:45")」の項は、b1が12:45より遅い時刻である場合のみ、差の時間を足します。 ●「-max(,a1-"12:45")」の項は、a1が12:45より遅い時刻である場合のみ、差の時間を引きます。 >IF関数を使えばいいのは分かっているのですが ご覧のとおり、IFは不要です。
お礼
御礼が遅くなり申し訳ありませんでした。 URLありがとうございます。IF関数を使わなくても出来るなんて初めて知りました! この4月から労働時間管理の仕事をすることになり、まだまだ分からないことだらけですが これからもっと勉強していきたいと思います。 本当にいろいろありがとうございました♪
- ka28mi
- ベストアンサー率41% (969/2315)
ひとつ疑問なのですが、終日勤務の時間はTIMEVALUEで7:45の方が良くはありませんか? 私の勘違いでしたら、申し訳ありません。 IF関数を2回組み合わせるとスムーズです。 =IF(AND(A1="半休",B1=TIMEVALUE("8:30")),TIMEVALUE("3:30"),IF(AND(A1="半休",B1=TIMEVALUE("12:45")),TIMEVALUE("4:15"),titimevalue("7:45"))) IF関数は、(条件、条件と一致の対応、不一致の対応)ですよね。 これを、2回組み合わることで、IF(条件1、条件1と一致の対応、IF(条件2、条件2と一致の対応、条件1とも2とも一致しない対応))とするわけです。 もっとも、半休が午前か午後かの二択なら、私でしたらA列ですべてを設定したいですね。 前半休、後半休、1日休みは年休、何もない日は勤務とでも名前を付けて、シート1に表を作ります。 A列に、区分として、勤務、前半休、後半休、年休 B列に、始業時間で、8:30、8:30、12:45、0:00 C列に、終業時間で、12:00、17:00、17:00、0:00 D列に勤務時間で、3:30、4:15、7:45、0:00 シート2以降を勤務時間の表として、 A列には、決めた言葉を入力 B列には、=INDEX(Sheet1!$A:$D,MATCH(Sheet2!$A1,Sheet1!$A:$A,FALSE),2) C列とD列は、B列と同じで最後の2が、3、4に変わります。 これは、INDEX関数(決まった範囲、何行目、何列目)を持ってこいという関数と、 MATCH関数、(探したい値、探す範囲、一致か類似か)という関数を組み合わせたもので、 シート2のA列に入れた言葉から、シート1の表のA列と一致する行、指定する列(この場合はA列から指定しているので2列目はB列、3列目はC列となります。)の値を持ってこい、という式です。 色々とやり方はありますので、もっと簡単な方法もあるのでしょうけれど、一つの方法です。 ご参考までに。
お礼
実は半休だけではなく年休・特休などもあり、今回は他人が作った勤務表をすぐ修正してと指示があり 急ぎだったのでゆっくり考える時間がなく、条件だけ一致すればいいと思い、他の方の回答を採用させていただきました。 また勤務表を修正する時が来ると思いますので、次回はこのアドバイスを元にゆっくり考えたいと思います。 本当にありがとうございました♪
- keithin
- ベストアンサー率66% (5278/7941)
数式で時刻(時間数)を計算させる時のやり方とか、いろいろ間違ってます。 計算例: =IF(B1="","",IF(A1="半休",IF(B1-"12:00"<0,TIME(3,30,0),TIMEVALUE("4:15")),"7:45"*1))
お礼
このやり方でも出来ました!ありがとうございました♪ ベストアンサーをつけたかったのですが締めてしまい、つけれず申し訳ありません・・・
- Cupper-2
- ベストアンサー率29% (1342/4565)
んとね、 関数を組んでいて分からなくなったら、式を分解して結果を表示させて確認をしましょう。 あと、条件は 「半休」 だけですか? A列に「半休」、B列に"8:30"、C列は無条件で"12:00"、D列は無条件で"3:30" A列に「半休」、B列に"12:45"、C列は無条件で"17:00"、D列は無条件で"4:15" ってこと? それならA列とB列の値を比較すればOK。 むしろそれ以外のことを考えちゃダメ。 AND(A1="半休",B1="8:30") AND(A1="半休",B1="12:45") この二つの条件について考えれば良いって事ですよ。 でもって、IF関数の書式は IF(条件,条件が成立したとき,条件が不成立のとき) ですから、複数の条件を比較するなら IF(条件,条件が成立したとき, IF(条件,条件が成立したとき,条件が不成立のとき) ) とすれば良い。 あとは、質問者さんが自身で考えることです。 他の人に作ってもらって、分かったつもりになるだけで実は理解していないって事が多いのね。 自分は質問者さんが問題を理解し自力で解決できなければ問題は解決していないと考えています ですのでこのように回りくどい回答になりますが、ご容赦ください。 自身の考える力を信じてくださいな。
お礼
ご指摘の通りIF関数を分かっていなくてここを頼ってしまいました。 他の方からもアドバイスをいただきましたが、ちゃんと理解してから活用いたします。 厳しいご意見ありがとうございました。
お礼
8:30と12:45以外の時間入力はないのでこの数式で出来ました! 1週間ぐらい行き詰まっていたので本当に助かりました。 1番に回答していただき、本当にありがとうございました♪