2015-04-04 249 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