2015-04-04 248 views
1

你好,我試圖找出列K和J中的數據之間的時間差。我需要知道需要花費多少時間來更新數據需要多長時間,或分鐘,並使用這些列。我也希望只在列A中的名稱匹配並在列N中輸入該信息時才能得到平均時間量。這是第一部分迄今爲止的內容。日期/時間差異VBA

ActiveSheet.Name = "Raw Data" Range("M2:M").Value = ("K2:K-J2:J" > 1) + ("d:hh:mm")

感謝您的幫助。

回答

0

這應該得到你想要的結果。 With ... End With block用於保存必須始終寫Worksheets("Raw Data")。以.開頭的塊內的任何內容都是指Worksheets("Raw Data")

該公式適用於this answer,但修改爲允許超過31天。然後,我們使用FillDown method在細胞M2的公式複製到同一行中列K.最後使用的單元格公式中的引用自動調整,以指向正確的行

編輯:更新計算列A中列出的每個名稱的平均流逝時間。這更復雜,因爲我們無法直接平均我們放入列M的值,因爲我們已將它們轉換爲文本格式。我選擇使用Z列來保存我們需要的數字時間值。您可以選擇任何其他未使用的列,並且可以隱藏該列,使其不顯示。

上次使用的行存儲在一個變量中,因爲我們需要在幾個不同的地方使用它。列K和J之間的數值差存儲在列Z中。然後從列Z中的值計算列M中的文本值。

最後,列N中的平均值使用AVERAGEIF function計算。這將查看A列中所有使用的行,找到與當前行名稱相同的那些行,然後對列Z中的所有值進行平均以獲得任何匹配的行。

需要注意的一點是:如果添加或刪除了任何行,則需要重新編寫N列中的所有公式。這是因爲如果行添加或刪除

With Worksheets("Raw Data") 
    Dim lngLastUsedRow As Long 
    lngLastUsedRow = .Cells(.Rows.Count, "K").End(xlUp).Row 

    .Range("Z2").Formula = "=K2-J2" 
    .Range("Z2:Z" & lngLastUsedRow).FillDown 

    .Range("M2").Formula = "=FLOOR(Z2,1)&"":""&TEXT(Z2,""hh:mm"")" 
    .Range("M2:M" & lngLastUsedRow).FillDown 

    .Range("N2").Formula = "=AVERAGEIF(A$2:A$" & lngLastUsedRow & ",A2,Z$2:Z$" & lngLastUsedRow &")" 
    .Range("N2:N" & lngLastUsedRow).FillDown 
End With 
+0

這工作存儲在這些公式中的最後一行值將變得不正確,但它簡化版,解決有關的平均時間量的第二部分,如果名字在列匹配A和那段時間輸入到N欄 – Lilly 2015-04-06 18:22:15

+0

需要更多信息「如果名稱與A列匹配」。你的意思是出現在列A的不同行中的相同名稱,還是你的意思是列A中的名稱與不同列中的名稱匹配? – barrowc 2015-04-06 21:20:44

+0

我很抱歉。我的意思是出現在列A的不同行中的同名。 – Lilly 2015-04-06 21:27:49