用于在一列中查找相似日期的公式,然后计算最小/最大值之间的差异

时间:2018-08-27 21:43:40

标签: excel excel-formula

有人知道拥有Excel的最好方法吗?

  1. 查看一列以查找所有类似的日期

  2. 计算最小日期时间和最大日期时间之间的总时间

  3. 将总计放在单独的列中

C                                     D 
8/27/2018 14:02       insert total time for each date here, ie:  8/27 00:05:03
8/27/2018 14:01     
8/27/2018 14:01     
8/27/2018 13:57     
8/27/2018 8:56      
8/24/2018 10:01 
8/24/2018 9:36      
8/23/2018 6:01  
8/21/2018 12:32 
8/21/2018 11:23     
8/20/2018 14:03 
8/20/2018 10:54     
8/17/2018 14:47 

我使用了=TEXT(C7-C8, "h:mm:ss"),但这根本不适合我。我要添加一个vlookup吗?

1 个答案:

答案 0 :(得分:0)

此解决方案要求您在VBA中创建UDF(用户定义的功能)。

本质上,您将循环查找列中所有匹配的日期。在所有匹配的日期上,您将根据需要修改minDtmaxDt变量-如果新时间低于或高于当前存储的时间,则进行修改。

这可能不是最佳解决方案,因为创建包含循环的UDF会成为瓶颈,但这是我目前能想到的。

Option Explicit

Function getTimeDiff(col As String, inputDt As Date)

    Dim colRng As Range, compDt As Date
    Set colRng = Columns(col)

    compDt = Int(inputDt)   '<-- Converts date/time to date only

    Dim cel As Range, maxDt As Date, minDt As Date, tmpDt As Date
    maxDt = inputDt
    minDt = inputDt
    For Each cel In colRng.Cells
        If cel = "" Then Exit For
        tmpDt = CDate(cel)
        If Int(tmpDt) = compDt Then
            If tmpDt > maxDt Then 
                maxDt = tmpDt
            ElseIf tmpDt < minDt Then 
                minDt = tmpDt
            End If
        End If
    Next cel

    getTimeDiff = Format(maxDt - minDt, "h:mm")

End Function
  

在此处阅读有关创建UDF的信息

     

如果您熟悉UDF,则可以跳过本节

     
      
  • Alt + F11 打开VBA。
  •   
  • 在VBE中,单击插入> 模块
  •   
  • 将以上代码粘贴到模块中
  •   
  • 另存为已启用宏的工作簿
  •   

保存UDF后,现在可以使用新创建的公式。

您的日期似乎在C列中。因此,如果您的第一个日期在C2中,则D2的公式将为:

=getTimeDiff("C", C2)

enter image description here