[[20210115094734]] 『時間の計算』(フリオ) ページの最後に飛ぶ

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

 

『時間の計算』(フリオ)

        機械A 機械B
工程1時間(秒)  80   82
工程2時間(秒)  45   42
工程3時間(秒)  10   10
工程4時間(秒)  30   35
待ち時間(秒)   X   Y

上記の様な表があるのですがこれは
各機械の工程時間1〜4を入力できるようになってます。
工程1から工程4まで行い、待ち時間を経てまた工程1に戻る様になってます。
ここで注意なのですが、機械AまたはBが工程1を行っている時は相方は同じ工程1を行わずに待機しています。(待ち時間のこと)
まず機械AとBを起動したら機械Aの工程1が開始。Bは待機。
Aの工程1が完了すると工程2へ移行する。Bは工程1へ移行する。
を順番に行ってループさせます。
ここで質問なのですが、表に時間を入力した場合に、このXとYの平均(3周くらいの)をマクロで自動計算することは出来ますか?
合計時間を知りたいのですが、XとYが変数で難しいので自動で計算させたいです。
説明が難しくて複雑だと思うのですがよろしくお願いします。

< 使用 Excel:Office365、使用 OS:Windows10 >


分かりやすく書くと、
        機械A           機械B
工程1時間(秒)  80   待ち時間(秒)    80   ←機械Aの工程1終了を待ってるので80秒
工程2時間(秒)  45   工程1時間(秒)   82
工程3時間(秒)  10   工程2時間(秒)   42
工程4時間(秒)  30   工程3時間(秒)   10
待ち時間(秒)   X   工程4時間(秒)   35
工程1時間(秒)  80   待ち時間(秒)    Y
工程2時間(秒)  45   工程1時間(秒)   82
工程3時間(秒)  10   工程2時間(秒)   42
工程4時間(秒)  30   工程3時間(秒)   10
待ち時間(秒)   X   工程4時間(秒)   35
工程1時間(秒)  80   待ち時間(秒)    Y
工程2時間(秒)  45   工程1時間(秒)   82
工程3時間(秒)  10   工程2時間(秒)   42
工程4時間(秒)  30   工程3時間(秒)   10
待ち時間(秒)   X   工程4時間(秒)   35
工程1時間(秒)  80   待ち時間(秒)    Y

あと書くの忘れたのですが、
待ち時間は最低20秒は入れないといけない様になってます。
よろしくお願いします。
(フリオ) 2021/01/15(金) 18:18


 ご提示の質問内容だと、3周までならXもYも20秒って話になりませんか?
 いまひとつ大変さが伝わってこないのですが・・

 1.実際は全然別の条件なんですか?
  機械の種類が実は10個あるとか、
  ダブり回避しなければならないのは、工程1だけじゃないとか、
  工程数はもっと多くて、その中間にも強制的に待ちを入れなければならないとか

 2.「3周くらいの平均」の考え方についてですが・・
   A,Bの周期が違っているので、終わりが揃わないと思うんですが、
   別々にみて各3回転であればいいんですか?

 3.Bの先頭の待ち時間は、平均算出の対象になるんですか?

(半平太) 2021/01/16(土) 07:45


コメントありがとうございます。
1.実際はもう少し時間が長いです。特に工程1の時間が長いです。
 好きな時間設定が出来る様になっていて、設定した時間だと待ち時間がどれくらいになるか前もって調べたいのです。回避するのは工程1だけです。
2.大体3周くらいで平均が出ると思っています。終わりは揃わないものなので大丈夫です。
3.すみません。書いていませんでしたね。Bの先頭の待ち時間は含みません。

よろしくお願いします。
(フリオ) 2021/01/18(月) 08:21


 >好きな時間設定が出来る様になっていて

 それは初出ですね。
 好きな時間は、下記確認事項5の工程時間表のどこに書くんですか?

 以下、再確認します。(後出しされると面倒なので)

 1.機械はA,Bの2種類だけである。

 2.1周は4工程(最後の強制休みもカウントすると5工程)で、
   ダブリ回避は第1工程だけでいい

 3.各機械別に3周シミュレーションして、1回当たりの平均を出す

 4.4工程の後に、最低20秒の休みを入れる。

   ※各工程の中間に休みを入れる必要はない。
     ※工程2〜4は合わせてワン工程と見て差し支えない

 5.工程時間表 (開始時刻は何処にどう記入されるのか具体的に示してください。)

  行  _____A_________  ____B______ ___C_____
   1                     機械A    機械B 
   2   工程1時間(秒)        80      82 
   3   工程2時間(秒)        45      42 
   4   工程3時間(秒)        10      10 
   5   工程4時間(秒)        30      35 
   6   待ち(最低20秒)     
   7                                    

(半平太) 2021/01/18(月) 09:26


1.機械は2種類だけです。
2.1周は4工程(最後の強制休みもカウントすると5工程)で間違いありません。
  ダブリ回避は第1工程だけでいいです。
 (工程1が一番長いので1がダブらなければ基本的に他はダブりませんし、SEQもそうなっています)
3.その認識で大丈夫です。
4.最後に最低20秒の休みを入れます。工程間の休みはありません。
 「工程2〜4は合わせてワン工程と見て差し支えない」とは工程1の時間と工程2〜4の合計時間で
 計算するという認識でしょうか?それなら問題ありません。
5.では、表は上記のA列=R列、1行=19行として下さい。並びは書いて頂いた通りで大丈夫です。
 開始時刻を記入とありますが、計算に時刻の入力が必要なのでしょうか?

ちなみにですが、工程1〜4の時間は別のセルから参照して表示する予定なのですが問題ないでしょうか?

よろしくお願い致します。
(フリオ) 2021/01/18(月) 10:26


  >開始時刻を記入とありますが、計算に時刻の入力が必要なのでしょうか?

  機械Aの開始時刻と
  機械Bの開始時刻は違っているのが普通かと思ったんですけど。

  何故って、同時にスタートすると、Aが工程1をやっている間、
  Bは必ず待たなければならない立場になるので、何かおかしいと感じるんですけども。。

  まぁ、議論しても始まらない部分なので、同時スタートで決まりとします。
  ※なので開始時刻は必要ありません。

  >工程1〜4の時間は別のセルから参照して表示する予定

  それは問題ないです。

  クラスモジュールを一枚挿入して、
  オブジェクト名を「Class1」から「機械」に変えてください。(Class1のままでは雰囲気が出ないので)

 ’----下記コードを「機械」クラスモジュールにコピペ----------------------

 Private OverHead As Long
 Private No1Proc As Long
 Private AllProc As Long

 Public IdolTimes As Long       '休みの回数
 Public IdolTotalTime As Long   '総休み秒数(出だしの待ちは含まない)
 Private IdolDefault As Long

 Public NextStartTime As Long

 Sub setInit(No1, Remaining, Break, OH)
     No1Proc = No1
     AllProc = No1 + Remaining + Break
     IdolDefault = Break
     NextStartTime = OH      '開始可能時刻(秒数)
     OverHead = OH           '出だし時差秒数をセット
 End Sub

 Function getNewTimeAvlNo1(ByVal TmAvlNo1 As Long) As Long
     Dim WaitTime As Long

     IdolTimes = IdolTimes + 1

     'WaitTime=工程1が稼働中だった場合の待ち時間調整
     WaitTime = Application.Max(0, TmAvlNo1 - NextStartTime)

     IdolTotalTime = IdolTotalTime + IdolDefault + WaitTime
     getNewTimeAvlNo1 = NextStartTime + No1Proc + WaitTime

     '次回スタート時刻を更新
     NextStartTime = NextStartTime + AllProc + WaitTime
 End Function

 ’----下記コードを標準モジュールにコピペ----------------------
 Sub BreakAverage()
     Dim MacnA As 機械
     Dim MacnB As 機械
     Dim MacnToStart As 機械
     Dim i As Long
     Dim Round3Done As Boolean
     Dim TimeAvailableForNo1 As Long

     Set MacnA = New 機械
     Set MacnB = New 機械

     '機械オブジェクトに各工程の秒数を持たせる
     '工程2〜4は合算秒数で管理
     MacnA.setInit Range("S20").Value2, Application.Sum(Range("S21:S23")), 20, 0
     MacnB.setInit Range("T20").Value2, Application.Sum(Range("T21:T23")), 20, Range("S20").Value2

     ' 開始可能時刻が早い方から工程1を処理させる(同時の場合はAが先)
     For i = 1 To 10
         Set MacnToStart = IIf(MacnA.NextStartTime <= MacnB.NextStartTime, MacnA, MacnB)
         TimeAvailableForNo1 = MacnToStart.getNewTimeAvlNo1(TimeAvailableForNo1)

         If MacnA.IdolTimes >= 3 And MacnB.IdolTimes >= 3 Then
             Round3Done = True
             Exit For
         End If
     Next i

     If Round3Done Then
         MsgBox "機械A 平均休み→" & Round(MacnA.IdolTotalTime / MacnA.IdolTimes, 2) & vbCr & _
                "機械B 平均休み→" & Round(MacnB.IdolTotalTime / MacnB.IdolTimes, 2)
     Else
         MsgBox "3周未達"
     End If
 End Sub

 '工程表シートをアクティブにして、マクロ「BreakAverage」を実行する。

(半平太) 2021/01/18(月) 17:56


す、すごいです。
できました!本当にありがとうございます!
あと、申し訳ありませんが、計算結果をセルに記入させるにはどうすればよいでしょうか?
何度も申し訳ありません。
(フリオ) 2021/01/19(火) 09:12

 >         MsgBox "機械A 平均休み→" & Round(MacnA.IdolTotalTime / MacnA.IdolTimes, 2) & vbCr & _
 >                "機械B 平均休み→" & Round(MacnB.IdolTotalTime / MacnB.IdolTimes, 2)
           ↓
         Range(表示させたいセルアドレス) = Round(MacnA.IdolTotalTime / MacnA.IdolTimes, 2)
         Range(表示させたいセルアドレス) = Round(MacnB.IdolTotalTime / MacnB.IdolTimes, 2)

 具体例:Range("S24") = Round(MacnA.IdolTotalTime / MacnA.IdolTimes, 2)
        Range("T24") = Round(MacnB.IdolTotalTime / MacnB.IdolTimes, 2)

(半平太) 2021/01/19(火) 09:49


出来ました。
何度もありがとうございました!
本当に助かりました。
(フリオ) 2021/01/19(火) 09:57

コメント返信:

[ 一覧(最新更新順) ]


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