您好我试图找出K列和J列中数据之间的时差。我需要知道数据需要花费多长时间来更新数据所需的天数,小时数或分钟数我正在使用那些列。我还想获得平均时间量,只有当列A中的名称匹配并在列N中输入该信息时。这是我到目前为止的第一部分。
ActiveSheet.Name = "Raw Data"
Range("M2:M").Value = ("K2:K-J2:J" > 1) + ("d:hh:mm")
感谢您的帮助。
答案 0 :(得分: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列中的文本值。
最后,使用AVERAGEIF function计算N列的平均值。这将查看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