[[20070423095406]] 『日にち&時間計算』(ごりら) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『日にち&時間計算』(ごりら)
 SHEET 1

   A       B         C               D          E

 数量   効率   開始日時      終了日時   シフト

 5000   200   2007/4/1 13:30        ?           1

  上記のようなデータを作成しています。
 A列が生産する数量、
 B列がこの商品の1時間あたりの生産可能数、
 Cが開始予定日時、
 E列が現在のシフトです。
 求めたいのはD列の終了日時です。
 シフトは、何パターンかあるのですがとりあえず2パターンとして、
 1が8:00から17:00まで、
 2が8:00から18:00まで。
 昼休みが12:00から12:50、休憩が15:00から15:10までです。
 休日はないと仮定しています。
 ちなみにシフトは、SHEET 2のA列、B列にそれぞれ、開始時間と終了時間を入力しています。

  上記の例であげれば、生産に必要な時間は25時間ですから、2007/4/4 14:30となります。
  これを求めたいのですが、初心者なものでただただ原始的にIF関数にて計算していくだけで、
 パターン化できません。すいませんが、教えて下さい。


 ←行頭に半角空白を入れると、書いたとおりの表示になります。これを入れないと、
 空白が勝手に詰まって、表が崩れます。


 ご指摘有難うございます。修正しておきました。(ごりら)
 すいません、どなたか上記悩みについて教えて頂けないでしょうか。

 レスが付かないようなので、一応考えた方法をUPします。 が、
 >上記の例であげれば、生産に必要な時間は25時間ですから、2007/4/4 14:30となります。
結果の1分の違いは、端数処理のためです。考え方の参考にでもして下さい。      ←この行のみ修正。
一般的な関数ですので、ヘルプを参照するなどして、紐解いてください。
また、滅茶苦茶になるので、要所要所(と私が考えてるだけですが)の為に作業列を設けました。
全体のレイアウトは、こんな感じです。
 【Sheet1】
    A	  B      C	       D	          E        F	  G	      H	         I	       J
 1 数量	 効率   開始日時	     終了日時	シフト 初日生産数 終日稼動生産数 終日稼動日数  最終日生産残数  最終日実稼動時間
2 5,000	 200  2007/4/1 13:30  2007/4/4 14:31	 1	666	1,600	       2	        1,134	       5:41

 【Sheet2】
     A	  B	   C	   D	  E	  F	 G
 1 シフト	開始時間	昼休憩_始	昼休憩_終	休憩_始	休憩_終	終了時間
 2   1	 8:00	 12:00	  12:50	 15:00	 15:10	 17:00
 3   2	 8:00	 12:00	  12:50	 15:00	 15:10	 18:00

 Sheet1の作業列の式は、こんな感じです。区切りのよさげなところで改行してます。
※数量等に関しては、超えない方がよいと思い、端数を勝手に切り捨てにしました。
F2の式:
 =ROUNDDOWN((VLOOKUP($E2,Sheet2!$A$2:$G$3,7,0)-MOD(C2,1)
 -IF(MOD(C2,1)>=VLOOKUP($E2,Sheet2!$A$2:$G$3,6,0),0,
 VLOOKUP($E2,Sheet2!$A$2:$G$3,6,0)-MAX(VLOOKUP($E2,Sheet2!$A$2:$G$3,5,0),MOD (C2,1)))
 -IF(MOD(C2,1)>=VLOOKUP($E2,Sheet2!$A$2:$G$3,4,0),0,
 VLOOKUP($E2,Sheet2!$A$2:$G$3,40)-MAX(VLOOKUP($E2,Sheet2!$A$2:$G$3,3,0),MOD(C2,1))))*24*$B2,0)
G2の式:
 =ROUNDDOWN((VLOOKUP($E2,Sheet2!$A$2:$G$3,7,0)-VLOOKUP($E2,Sheet2!$A$2:$G$3,2,0)
 -(VLOOKUP($E2,Sheet2!$A$2:$G$3,6,0)-VLOOKUP($E2,Sheet2!$A$2:$G$3,5,0))
 -(VLOOKUP($E2,Sheet2!$A$2:$G$3,4,0)-VLOOKUP($E2,Sheet2!$A$2:$G$3,3,0)))*24*$B2,0)
H2の式:
 =INT(($A2-$F2)/$G2)
I2の式:
 =$A2-$G2*$H2-$F2
J2の式:
 =CEILING(($I2/$B2)/24,--"0:01")

 最終的には、上記の結果等を元にして↓こんな感じ。作業列なしでは、私にゃ無理。。。
D2の式:
 =DATE(YEAR(C2),MONTH(C2),DAY(C2)+H2)
 +IF($I2>0,1+VLOOKUP($E2,Sheet2!$A$2:$G$3,2,0)
 +IF(VLOOKUP($E2,Sheet2!$A$2:$G$3,3,0)>=VLOOKUP($E2,Sheet2!$A$2:$G$3,2,0) +$J2,$J2,
 IF(VLOOKUP($E2,Sheet2!$A$2:$G$3,5,0)>=VLOOKUP($E2,Sheet2!$A$2:$G$3,2,0)+$J2
 +(VLOOKUP($E2,Sheet2!$A$2:$G$3,4,0)-VLOOKUP($E2,Sheet2!$A$2:$G$3,3,0)),
 $J2+(VLOOKUP($E2,Sheet2!$A$2:$G$3,4,0)-VLOOKUP($E2,Sheet2!$A$2:$G$3,3,0)),
 $J2+(VLOOKUP($E2,Sheet2!$A$2:$G$3,6,0)-VLOOKUP($E2,Sheet2!$A$2:$G$3,5,0))
 +(VLOOKUP($E2,Sheet2!$A$2:$G$3,4,0)-VLOOKUP($E2,Sheet2!$A$2:$G$3,3,0)))),
 VLOOKUP($E2,Sheet2!$A$2:$G$3,7,0))

 あーしんど。以上です。
尚、一つの例でしか試していませんので、間違い等ありましたらご了承下さい。
また、条件追加には対応しません。
言ってみれば、書きっぱなしの、書き逃げ になります。(笑)
(sin)

 >>上記の例であげれば、生産に必要な時間は25時間ですから、2007/4/4 14:30となります。
 >ここで、既に違っているのであてには出来ません。考え方の参考にでもして下さい。
 と私も最初思ったんですが、実際計算してみると
 4/1 13:30〜17:00 休憩時間10分除いて実働3:20
 4/2  8:00〜17:00 休憩時間60分除いて実働8:00
 4/3  8:00〜17:00 休憩時間60分除いて実働8:00
 4/4  8:00〜14:30 休憩時間50分除いて実働5:40
 で3:20+8:00+8:00+5:40=25:00
 となり、合ってるのでは?と。この時点で考えが間違ってるんでしょうか?
 休憩時間を考慮していたら、ちんぷんかぷん???
 諦めました。
 (素)

 思い込みの為勘違いしてましたので、上レスのコメント変更しました。
※計算結果の時間が 14:41だと思い込んでました。失礼しました。。。
素さん、悩ませてゴメンナサイ。
(sin)

 >素さん、悩ませてゴメンナサイ。
 いえ、そんなつもりでは無いんです。

 恥ずかしながら途中まで作成したものを・・・
 よく分からないんで開始の日と時間を別セルにしました。
 最終での休憩時間がどうしても考慮できなかったんで
 終了時間がおかしいです。
 sheet1の開始日,開始時間,シフトを入力してもらえれば
 嘘っぽいのが出来るはずです。
 私も書き逃げです・・・
 【sheet1】
      [A]  [B]    [C]     [D]      [E]      [F]      [G]
[1]  数量  効率  開始日 開始時間  終了日  終了時間  シフト
[2]  5000  200    4/1    13:30     *1       *2        *3

 【sheet2】
      [A]      [B]       [C]       [D]      [E]      [F]     
[1] 実働時間  シフト   実働日数  余り時間  終了日  終了時間
[2]   *4        1         *5       *6        *7       *8
[3]             2         *9       *10       *11      *12
[4]
[5] 開始時間  終了時間 実働時間
[6]   8:00    17:00      8:00
[7]   8:00    18:00      9:00

 *1=VLOOKUP(G2,Sheet2!B2:F3,4)
 *2=VLOOKUP(G2,Sheet2!B2:F3,5)
 *3= 1 or 2 を入力
 *4=Sheet1!A2/Sheet1!B2/24
 *5=ROUNDDOWN(A2/Sheet2!C6,0)
 *6=MOD(A2,Sheet2!C6)
 *7=IF(Sheet1!D2+D2>17/24,Sheet1!C2+C2+1,Sheet1!C2+C2)
 *8=IF(Sheet1!D2+D2>Sheet2!B6,Sheet2!A6+(Sheet1!D2+D2-Sheet2!B6),Sheet1!D2+D2)
 *9=ROUNDDOWN(A2/Sheet2!C7,0)
 *10=MOD(A2,Sheet2!C7)
 *11=IF(Sheet1!D2+D3>18/24,Sheet1!C2+C3+1,Sheet1!C2+C3)
 *12=IF(Sheet1!D2+D3>Sheet2!B7,Sheet2!A7+(Sheet1!D2+D3-Sheet2!B7),Sheet1!D2+D3)
 (素)

 <追記>
 文章でフォントをいじるの(太字など)は、どうするんですか?

 >文章でフォントをいじるの(太字など)は、どうするんですか?
 記憶を頼りに探し出してきました。
[[20060325102607]] 『ソートすると空白が先に』(苦学生)
このスレの下の方を見て下さい。 いや、全部読んでも構いませんけど・・・

 Link先に行って、一読後に上方にある【返信・編集】をポチッと押して、編集画面で見るとよく分ります。
尚、プレビューを見る分には構いませんが、
決して編集したまま、
ページの更新ボタンを 押さないように!!
 注意してくださいまし。 >>> 改ざん犯人として、アク禁となります。(笑)
(sin)

 こんなスレもありました〜。(ROUGE)
[[20060810165303]]『エクセルのことではないのですが、、』(ミリタリー)

おぉ〜!!!
 できましたぁ〜!
 ありがとうございまする〜!
 (素)

 関数では面倒な計算のようでしたので、マクロを書いてみました。
For〜Next の途中で抜け出すという、何とも締まらないものですが・・・
30日制限付きです(-_-;) 一応、下記の結果になりました。 (Hatch)
数量	効率	開始日時	終了日時	シフト
5000	200	2007/4/1 13:30	2007/4/4 14:30	1
5000	200	2007/4/1 13:30	2007/4/4 10:40	2

 Function keisan(r As Range)
Dim myTime, sTime, kTime, rTime
Dim i As Integer, j As Integer
Dim dCnt, ans
myTime = Round(TimeValue(r.Value) * 1440, 0)
rTime = (r.Offset(0, -2).Value / r.Offset(0, -1).Value) * 60
    Select Case r.Offset(0, 2).Value
      Case 1
        sTime = Array(480, 720, 770, 900, 910, 1020)
      Case 2
        sTime = Array(480, 720, 770, 900, 910, 1080)
    End Select
    For j = 0 To 30
        For i = LBound(sTime) To UBound(sTime) Step 2
            If sTime(i) <= myTime And myTime <= sTime(i + 1) Then
                kTime = kTime + sTime(i + 1) - myTime
                    If kTime >= rTime Then
                        ans = (sTime(i + 1) - (kTime - rTime)) / 1440
                        ans = Int(r.Value) + dCnt + ans
                        keisan = ans
                        Exit Function
                    End If
                If i + 2 > UBound(sTime) Then
                    myTime = sTime(0)
                Else
                    myTime = sTime(i + 2)
                End If
            End If
        Next i
        dCnt = dCnt + 1
    Next j
End Function

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.