• 締切済み

シフト表を作成しています。関数について教えて頂きたいです。

シフト表を作成しています。関数について教えて頂きたいです。 たとえば 10:00~21:00のときは実働時間が7.66時間 A1 10: と入力 A2 21: と入力 ・・・A3に7.66と表示 11:00~21:00=6.83時間 14:00~21:00=6時間 15:00~21:00=5.16時間 16:00~17:00=4.33時間 17:00~18:00=3.5時間 18:00~21:00=2.66時間 19:00~21:00=1.83時間 こういうのは可能なのでしょうか? 情報が足りなければ、付け足します。 どなたか詳しい方、お願い致します。

みんなの回答

  • MRT1452
  • ベストアンサー率42% (1391/3293)
回答No.3

お礼からすると、質問の内容は誤記ということでよろしいでしょうか? サンプルの事象を出すなら、できるだけ正確な情報でお願いします。 貴方の説明ならば「17:00~20:00=3.5時間」ということですよね? 私はなぜ「17:00~18:00=3.5時間」なのか?ということを問うたはずですが? さておき。場合分けがある以上、 何にしても関数一個でポンと出るようなものではないです。 入力からすると、最低単位は「時」ということで良いですね? 入力1をx 入力2をyとします。 また、必ずx<yとなり、日を跨がないものとします。 ※VB/VBA形式です。 また、テスト実行等は全くしてませんので動作保障できません。 double型使ってるので、値によっては誤差値が発生します。 dim answer as double dim flg as boolean flg = false if x <= 20 and y >= 21 then answer = (y - x) - ((1/6) * (y - x - 1)) else answer = (y - x) - ((1/6) * (y - x)) end if これが入力の最低単位が「分」とか 上の条件を無視した汎用性のあるものとか になるともっと複雑化します。

noname#198951
noname#198951
回答No.2

20:00以前なら 20:00~21:00までの1時間と、 20:00までの時間毎に1/6時間を引いていけば計算式として成り立ちと思いますが。 時間-(時間x1/6) かなぁ。

  • MRT1452
  • ベストアンサー率42% (1391/3293)
回答No.1

まず、その=が成り立つ一定法則が無いとプログラムとして作り様がないかと。 まぁ、全パターンを洗い出してそれをifやSelect(Switch)で場合分けするという 強引な方法もなきにしもあらずですが。 だって、常識的に考えて、 17:00~18:00って普通1時間でしょ? それがなぜ3.5時間になるのか。 その法則を決めるのがプログラム設計であり、その設計無くしてプログラムは作れません。 セル式にしろVBAにしろ、一般常識的な計算しかできませんよ。

atsukopyon
質問者

お礼

ありがとうございます。 すみません。やはり情報が足りずでした。。。 17:00=50分 18:00=50分 19:00=50分 20:00=60分 で合計210分になって210分を60分で割ると、3.5になるのですが、 それを稼働時間としています。 ※つまり、各次官10分ずつの休憩が入ります。 また20時~21時に関しては60分の稼動として考えます。

関連するQ&A