2017-07-21 105 views
0

我想知道如何通過從給定的到期日期/時間中減去給定的小時數來計算日期/時間,以便我知道什麼時候需要在產品組件上啓動一個流程步驟,以便及時完成向客戶發貨。從指定的日期/時間減去指定的小時數以獲得新的日期/時間

例如,產品要準備就緒15:00出貨給客戶2017年9月15日

總裝和驗證步驟,從後到前,是

  • 步驟15 - 需要12.6小時完成
  • 步驟10 - 需要32.1小時完成
  • 步驟05 - 需要25.9小時完成

向後

  • 第15步的工作需要由15:00 2017年9月15日是完整運送到客戶
  • 第10步需要由02:24在9/15是完整/ 2017準時開始第15步
  • 第05步需要在2017年9月13日06:18完成才能按時開始第10步
  • 所有組件都需要在04:24準備好裝配在2017年9月12日準時開始第05步

我花了一整天的時間搜索一個足夠接近我和我認爲我將必須使用DateTime函數做什麼的示例,我只是不確定目前是什麼

+0

是步驟總是串行,還是可以運行一些parrallel?我們是否應該總是假設24小時的工作日。似乎是從完成日期時間中減去三次的簡單總和:'= A1 - (SUM(B1:B3)/ 24)'其中A1是出​​貨日期和時間,B1:B3是時間的位置它需要每一步。您可以修改公式來完成每一行。 –

+0

@ScottCraner - 在某些情況下,可以並行運行一些流程(儘管這將是基於機器可用性的車間決策)。在大多數情況下,工作日爲24小時,但有些情況下(即庫存),工作日可能因換班等而縮短 –

回答

2

您可以從日期減去n小時,只需從中減去n/24。您還可以使用TimeSerial函數來減去小時,分鐘和秒。這個例子說明了兩種方法,它使用兩種方法從當前時間減去1小時半。

Sub substractDates() 
    Dim d1 As Date, d2 As Date, d3 as Date 
    d1 = Now() 
    d2 = d1 - TimeSerial(1, 30, 0) 
    d3 = d1 - 1.5/24 
    Debug.Print d1, d2, d3 
End Sub 

p.s.第三種方法是使用TimeValue("1:30:0"),相當於TimeSerial(1, 30, 0)

0

這個宏會給你一個想法如何設置它:它可以進一步處理使用用戶輸入或從列表中花費時間。

Sub test() 
Dim dtmstart As Date 
Dim steps(2) As Double 
Dim duration, hours As Double 
dtmstart = "2017/9/15 15:00" 
steps(0) = 12.6 
steps(1) = 32.1 
steps(2) = 25.9 

MsgBox "Last step will need to be completed by: " & dtmstart 
For Each c In steps 
'convert hours to days 
hours = c/24 
duration = dtmstart - hours 
dtmstart = Application.Text(duration, "yyyy-mm-dd hh:mm") 
MsgBox dtmstart 
Next c 
End Sub 
0

DateAdd方法用於添加或減去Date對象。第一個參數是間隔類型。在下面的代碼中,「h」表示小時,「n」表示分鐘。要反向工作,請將您的小時和分鐘輸入爲負值。

Dim dtShipTime As Date 
Dim dtStep15Start As Date 
Dim dtStep10Start As Date 
Dim dtStep05Start As Date 

dtShipTime = #9/15/2017 3:00:00 PM# 

dtStep15Start = DateAdd("h", -12, dtShipTime) 
dtStep15Start = DateAdd("n", -36, dtStep15Start) 

dtStep10Start = DateAdd("h", -32, dtStep15Start) 
dtStep10Start = DateAdd("n", -6, dtStep10Start) 

dtStep05Start = DateAdd("h", -25, dtStep10Start) 
dtStep05Start = DateAdd("n", -54, dtStep05Start) 

參考 http://www.chennaiiq.com/developers/reference/visual_basic/functions/dateadd.asp