EXCELで作った完全自由シフト制の職場の勤務希望表で、時間帯別の稼動人数を求めたいと考えています。どのような計算方法があるか教えて下さい。


|*||*A|*B|*C|*D|
|*1||名前||入時間||出時間|
|*2||○○男||8:00||12:00|
|*3||○○子||13:00||21:00|
|*4||○○雄||17:00||20:00|
|*5||○○代||10:00||16:00|
|*6||8:00~9:00|||
|*7||9:00~10:00|||

このような表組みを想定しています。
このとき、B6には8:00~9:00の稼動人数を、B7には9:00~10:00の稼動人数をと、以下、21:00~22:00までの一時間単位で、その時間帯の稼動人数を算出したいと思っています。

Countif関数等、いろいろ試してみましたが、上手くいきません。

スマートな方法があれば、ご教示下さい。

回答の条件
  • 1人2回まで
  • 登録:2008/04/24 15:50:15
  • 終了:2008/05/01 15:55:03

回答(4件)

id:ootatmt No.1

ootatmt回答回数1307ベストアンサー獲得回数652008/04/24 16:17:44

ポイント23pt

[D8]8:00 [E8]9:00 ... [Q8]21:00

[D9]9:00 [E9]10:00... [Q9]22:00

というデータを入れます。


[D2]に =($B2<=D$8)*($C2>=D$9) と入力し、下、右のセルにコピーします。


これで、D2~Q5 のセルに、勤務している時間には 1 が入りますので、

D6 に =SUM(D2:D5) と入力しておけば稼働している人数が分かります。


いかがでしょうか?

id:noiehoie

ご回答、ありがとうございます。

おっしゃることは良くわかります。参考になります。

当方の説明不足で伝わっていないですが、例示の表組みはあくまでも一日分で

2日目3日目と、横に伸びていくイメージです。 ですので、稼働時間はあくまでも

7行目以下に表示したいと思っています。

2008/04/24 16:51:25
id:Gay_Yahng No.2

Gay_Yahng回答回数724ベストアンサー獲得回数262008/04/24 16:41:15

ポイント23pt

http://q.hatena.ne.jp/1205380873

前に回答したもので似たようなものがあったので。

入力してもらうのが始める時刻と終わる時刻です。

id:noiehoie

ありがとうございます。

考え方としては、ものすごく参考になるのですが、別表を作る必要がありますよね・・・

できれば別表を作らずに、やってしまいたいのです。

2008/04/25 10:51:04
id:ootatmt No.3

ootatmt回答回数1307ベストアンサー獲得回数652008/04/24 17:08:48

ポイント22pt

>2日目3日目と、横に伸びていくイメージです。


では、

[A6]8:00

[A7]9:00

 :

[A20]22:00

と入力しておいて、

B6 に =(B$2<=$A6)*(C$2>=$A7)+(B$3<=$A6)*(C$3>=$A7)+(B$4<=$A6)*(C$4>=$A7)+(B$5<=$A6)*(C$5>=$A7)

と入力してはどうですか。

これを下にコピーすれば、その時間の稼働人数が分かりますし、

2行ずつ横にコピーすれば、2日目、3日目と計算できると思います。

いかがでしょう?

id:noiehoie

ありがとうございました。

ただこの表だと、列が伸びると大変だとおもうのですが・・・・

2008/04/25 10:58:14
id:guja No.4

guja回答回数40ベストアンサー獲得回数82008/04/24 17:10:24

ポイント22pt

配列数式を使えば、1つのセルで完結できるかと思います。

例えばB6セルの値であれば、下記のような関数を入力し、


=SUM( IF( (VALUE(B2:B5) <= VALUE("9:00") * (VALUE(C2:C5) >= VALUE("8:00"))),1,0))


確定するときにCtrl + Shift + Enter キーを同時に押せば、配列数式として認識され、セルには

{=SUM( IF( (VALUE(B2:B5) <= VALUE("9:00") * (VALUE(C2:C5) >= VALUE("8:00"))),1,0))}

という表示になるかと思います。


この場合は、8:00から9:00に該当するのであれば1を、そうでなければ0を返す、という関数を、

2行目から5行目まで繰り返し行い、その1だったものだけをSUMすることで、カウントしています。

配列数式については下記ページがわかりやすいかと思います。

http://t_shun.at.infoseek.co.jp/My_Page/Excel-REF/ref_page4-1.ht...

http://pc.nikkeibp.co.jp/pc21/special/hr/

id:noiehoie

ありがとうございます。

おそらく、最もイメージに近いお答えだと思われます。

もしほかにもこんなやり方があるよ、というのがあれば、まだまだ回答を受け付けたいと思います。

2008/04/25 10:56:04
  • id:noiehoie
    table記法で書いたつもりでしたが、もうぐちゃぐちゃですね・・・・
    醜い質問記事で、申し訳ありません。
  • id:ootatmt
    回答回数に制限があるのでコメントに書かせてもらいます。

    回答3の条件で、B6 に
    {=SUM((B$2:B$5<=$A6)*(C$2:C$5>=$A7))}
    と入力して、コピーしていけばいいと思いますよ。
    行が増えても列が増えても問題ありません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません