[[20051217124814]] 『作業終了時間の計算』(mkz) ページの最後に飛ぶ

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

 

『作業終了時間の計算』(mkz)
   A             B            C            D      E
 1 製品名     作業単位時間    数量      開始時間   作業完了時間
 2 #111          1.1               500
 3

の場合に休み時間が、10:00〜10:10, 12:00〜12:45 , 15:00〜15:10,17:15〜17:30
なっています。この休み時間をプラスした作業完了時間を計算する場合は、
どのようにしたらよろしいでしょうか?
最初の作業開始時間のみ入力で、その後は前項の作業完了時間を開始時間とします。


 なかなか回答が付かないようですので、何かの足しになれば・・・
 作業単位時間がどういうものか理解できませんでしたので、
 必要な時間が入力されるとしています。
 細かい検証はしていませんが、こんな感じでしょうか?
   (Hatch)
 	A	B	C	D	E
1	製品名	作業単位時間	数量	開始時間	作業完了時間
2	#111	0:15	500	9:50	10:15
3	#112	1:00		10:15	11:15
4	#113	2:00		11:15	14:00
5				14:00	
Sub test()
Dim StTime As Long
Dim EdTime As Long
Dim myTime As Long
Dim rest0 As Long
Dim rest1 As Long
Dim rest2 As Long
Dim i As Long
    For i = 2 To Range("B100").End(xlUp).Row
        StTime = Round(Cells(i, 4).Value * 1440, 0)
        EdTime = StTime + Round(Cells(i, 2).Value * 1440, 0)
        myTime = StTime
        kyukei myTime
        rest1 = myTime
        myTime = EdTime
        kyukei myTime
        rest2 = myTime
        rest0 = rest2 - rest1

        StTime = EdTime
        EdTime = EdTime + rest0
        myTime = StTime
        kyukei myTime
        rest1 = myTime
        myTime = EdTime
        kyukei myTime
        rest2 = myTime
        rest0 = rest2 - rest1
        EdTime = EdTime + rest0
        Cells(i, 5).Value = EdTime / 1440
        Cells(i + 1, 4).Value = EdTime / 1440
    Next i
End Sub
Sub kyukei(myTime As Long)
Dim rest0 As Long
    If myTime <= 600 Then rest0 = 0
    If myTime > 600 And myTime <= 720 Then rest0 = 10
    If myTime > 720 And myTime <= 900 Then rest0 = 55
    If myTime > 900 And myTime <= 1035 Then rest0 = 65
    If myTime > 1035 Then rest0 = 80
    myTime = rest0
End Sub

回答、有難う御座います。
只、マクロは、未だ理解していませんので、
出来れば、Excelでの処理をお願致します。

又、説明不足の作業単位時間は、1台当たりの作業時間です。
#111は、1.1(M)*500=550(M)
AM8:00開始で作業完了時間(休み時間入れ)の時刻を算出します。


 ◆関数による方法です!
 ◆少し、変更しました!
 1)作業単位時間を、便宜上、単位時間 と表示しています!
 2)作業時間=作業単位時間*数量 を追加しました
 ◆なお、条件として、開始時間は最初の休憩時間の10:00より以前とします!

 	A	B	C	D	E	F
 1	製品名	単位時間	数量	作業時間	開始時間	完了時間
 2	#111	1.1	100	110:00	8:00	9:50
 3	#111	1.1	200	220:00	8:00	11:50
 4	#111	1.1	300	330:00	8:00	14:25
 5	#111	1.1	400	440:00	8:00	16:25
 6	#111	1.1	500	550:00	8:00	18:30

 ◆作業時間の式
 D2=TEXT(INT(B2)*100+MOD(B2,1)*60,"00!:00!:00")*C2
 ★表示形式は、ユーザー定義で、[mm]:ss にします

 ◆完了時間の式
 F2=E2+D2+IF(E2+D2+"0:65"*1>"17:15"*1,"0:80",IF(E2+D2+"0:55"*1>"15:00"*1,"0:65",IF(E2+D2+"0:10"*1>"12:00"*1,"0:55",IF(E2+D2>"10:00"*1,"0:10",0))))

 ◆もう少し、式を短く出来るかもしれませんが!?

 ◆いかがでしょうか!
 (Maron)

 とりあえず作ってみました。
 作業列を少なくする所に重きを置きましたので
 メンテは無理かも・・・・・。

 Sheet1
	A	B	C	D	E	F	G
  1     製品名  作業  個数   作業   作業   作業  作業
         単位       開始   終了   列1  列2
         時間       時間   時間
  2	#111	1	60	8:00	9:00	0:00	0:00
  3	#111	1	60	9:00	10:00	0:00	0:00
  4	#111	1	60	10:00	11:10	0:10	0:00
  5	#111	1	60	11:10	12:55	0:45	0:00
  6	#111	1	60	12:55	13:55	0:00	0:00
  7	#111	1	60	13:55	14:55	0:00	0:00
  8	#111	1	60	14:55	16:05	0:10	0:00
  9	#111	1	60	16:05	17:05	0:00	0:00
 10	#111	1	60	17:05	18:20	0:15	0:00
 11	#111	1	60	18:20	19:20	0:00	0:00

 Sheet2
	A	B
  1	休憩開始	休憩終了
  2	10:00	10:10
  3	12:00	12:45
  4	15:00	15:10
  5	17:15	17:30

 Sheet2に休憩開始時間と終了時間を入れてください。

 Sheet1の関数は

 E2=IF(C2="","",D2+B2/(24*60)*C2+F2+G2)

 F2=IF(C2="","",IF(OR(IF(D2<=Sheet2!$A$2,1,0)+IF(D2+B2/(24*60)*C2<=Sheet2!$A$2,1,0)+IF(D2+B2/(24*60)*C2<=Sheet2!$B$2,1,0)=1,IF(D2<=Sheet2!$A$2,1,0)+IF(D2+B2/(24*60)*C2<=Sheet2!$A$2,1,0)+IF(D2+B2/(24*60)*C2<=Sheet2!$B$2,1,0)=2),Sheet2!$B$2-Sheet2!$A$2,0)+IF(OR(IF(D2<=Sheet2!$A$3,1,0)+IF(D2+B2/(24*60)*C2<=Sheet2!$A$3,1,0)+IF(D2+B2/(24*60)*C2<=Sheet2!$B$3,1,0)=1,IF(D2<=Sheet2!$A$3,1,0)+IF(D2+B2/(24*60)*C2<=Sheet2!$A$3,1,0)+IF(D2+B2/(24*60)*C2<=Sheet2!$B$3,1,0)=2),Sheet2!$B$3-Sheet2!$A$3,0)+IF(OR(IF(D2<=Sheet2!$A$4,1,0)+IF(D2+B2/(24*60)*C2<=Sheet2!$A$4,1,0)+IF(D2+B2/(24*60)*C2<=Sheet2!$B$4,1,0)=1,IF(D2<=Sheet2!$A$4,1,0)+IF(D2+B2/(24*60)*C2<=Sheet2!$A$4,1,0)+IF(D2+B2/(24*60)*C2<=Sheet2!$B$4,1,0)=2),Sheet2!$B$4-Sheet2!$A$4,0)+IF(OR(IF(D2<=Sheet2!$A$5,1,0)+IF(D2+B2/(24*60)*C2<=Sheet2!$A$5,1,0)+IF(D2+B2/(24*60)*C2<=Sheet2!$B$5,1,0)=1,IF(D2<=Sheet2!$A$5,1,0)+IF(D2+B2/(24*60)*C2<=Sheet2!$A$5,1,0)+IF(D2+B2/(24*60)*C2<=Sheet2!$B$5,1,0)=2),Sheet2!$B$5-Sheet2!$A$5,0))

 G2=IF(C2="","",IF(OR(IF(D2<=Sheet2!$A$2,1,0)+IF(D2+B2/(24*60)*C2+F2<=Sheet2!$A$2,1,0)+IF(D2+B2/(24*60)*C2+F2<=Sheet2!$B$2,1,0)=1,IF(D2<=Sheet2!$A$2,1,0)+IF(D2+B2/(24*60)*C2+F2<=Sheet2!$A$2,1,0)+IF(D2+B2/(24*60)*C2+F2<=Sheet2!$B$2,1,0)=2),Sheet2!$B$2-Sheet2!$A$2,0)+IF(OR(IF(D2<=Sheet2!$A$3,1,0)+IF(D2+B2/(24*60)*C2+F2<=Sheet2!$A$3,1,0)+IF(D2+B2/(24*60)*C2+F2<=Sheet2!$B$3,1,0)=1,IF(D2<=Sheet2!$A$3,1,0)+IF(D2+B2/(24*60)*C2+F2<=Sheet2!$A$3,1,0)+IF(D2+B2/(24*60)*C2+F2<=Sheet2!$B$3,1,0)=2),Sheet2!$B$3-Sheet2!$A$3,0)+IF(OR(IF(D2<=Sheet2!$A$4,1,0)+IF(D2+B2/(24*60)*C2+F2<=Sheet2!$A$4,1,0)+IF(D2+B2/(24*60)*C2+F2<=Sheet2!$B$4,1,0)=1,IF(D2<=Sheet2!$A$4,1,0)+IF(D2+B2/(24*60)*C2+F2<=Sheet2!$A$4,1,0)+IF(D2+B2/(24*60)*C2+F2<=Sheet2!$B$4,1,0)=2),Sheet2!$B$4-Sheet2!$A$4,0)+IF(OR(IF($D2<=Sheet2!$A$5,1,0)+IF($D2+B2/(24*60)*C2+F2<=Sheet2!$A$5,1,0)+IF($D2+B2/(24*60)*C2+F2<=Sheet2!$B$5,1,0)=1,IF($D2<=Sheet2!$A$5,1,0)+IF($D2+B2/(24*60)*C2+F2<=Sheet2!$A$5,1,0)+IF($D2+B2/(24*60)*C2+F2<=Sheet2!$B$5,1,0)=2),Sheet2!$B$5-Sheet2!$A$5,0)-F2)

 として、必要行下にコピーして下さい。

 「最初の作業開始時間のみ入力で、その後は前項の作業完了時間を開始時間とします。」
 とのことですので、D列は
D3=IF(C3="","",E2)
 で、下にコピーです。

 うまくいきますでしょうか?

 (HANA)

皆さん、有難う御座います。
休み時間を含んでいます。
感激*2でした。
これから応用して行きます。


コメント返信:

[ 一覧(最新更新順) ]


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