计算开始和结束时间之间的gab数据

时间:2016-01-03 08:01:18

标签: excel vba excel-vba

请我在一个可能有些复杂的公式中需要帮助, 在概述中,此工作表具有用户名,间隔,聊天开始时间和聊天结束时间, 我需要导出代理没有任何聊天时间的空闲时间,因此代理可以一次进行2或3次聊天,

我使用以下代码来获得结束和开始聊天之间的持续时间之间的差距:

Option Explicit

Function DataGap(NameRange As Range, xName As String, StartRange As Range, EndRange As Range, StartTime As Date, Optional EndTime As Date) As Date

Dim GapRange As Range
Dim ShiftRange As Range
'how many seconds in a day?
Const xConv As Long = 86400
Dim intRange As Range
Dim i As Long
Dim missingCells As Long

If EndTime = 0 Then
    'Calculate end of interval
    EndTime = StartTime + TimeValue("0:15:00")
End If



'Build shift range
Set ShiftRange = Range(Cells(StartTime * xConv, 1), Cells(EndTime * xConv, 1))


'Build filled range
For i = 1 To NameRange.Cells.Count
    If NameRange.Cells(i).Value = xName Then
        If GapRange Is Nothing Then
            Set GapRange = Range(Cells(StartRange.Cells(i) * xConv, 1), Cells(EndRange.Cells(i) * xConv, 1))
        Else
            Set GapRange = Union(GapRange, Range(Cells(StartRange.Cells(i) * xConv, 1), Cells(EndRange.Cells(i) * xConv, 1)))
        End If
    End If
Next i

If Not GapRange Is Nothing Then
    Set intRange = Intersect(GapRange, ShiftRange)
End If
If intRange Is Nothing Then
    missingCells = ShiftRange.Cells.Count - 1
Else
    missingCells = ShiftRange.Cells.Count - intRange.Cells.Count
End If

DataGap = missingCells / xConv
End Function

snapshot

在回顾中,这张表获得了#34;上一次"之间的空闲时间(Gap)。用"开始时间),但不是完全的,有些事情出了问题我无法得到它

如图所示

有色单元格指的是错误的发生值。由于UDF结果返回0,而它们是空闲时间,因为"上一次"用"开始时间)

workbook

非常感谢,

2 个答案:

答案 0 :(得分:0)

我不确定你为什么要为此创建一个宏。这可以通过简单的公式来完成。使用以下步骤:

  1. 按照升序(最小到最大)对工作表进行排序,第一级为Agent Name,第二级为Visit Time。这将为您提供一个列表,其中包含与每个代理相关的所有访问时间。
  2. 下一步在Column E之后插入一列。我们的新专栏现在为Column F。将此列命名为Free Time
  3. 在第一个单元格中的Column F(即。Cell F2)粘贴公式 - =IF(E2<D3,(D3-E2)*86400,0)。使用该公式填充其余单元格。现在,您将在几秒钟内为每个人腾出空闲时间。如果需要,您可以将其转换为分钟。 (如果同一工作表上有多个代理,请使用此公式=IF(A2=A1,IF(E2<D3,(D3-E2)*86400,0),0)这将确保找到新代理的第一行free time为0。)
  4. 现在,如果您想获得一个报告,显示每个时间间隔内每个业务代表的空闲时间。只需选择所有数据,然后插入一个数据透视表,Agent NameColumn LabelIntervalRow LabelsSum of Free Time为值。这将为您提供一个整洁的表格,显示每个间隔的每个代理的空闲时间。使用列标签和行标签进行一些实验,以获得正确的布局。
  5. 这也可以用VBA完成,但我觉得这是最简单的方法。在处理VBA时,您可以执行完全相同的步骤和相同的逻辑来查找空闲时间。 快乐的编码!!!

答案 1 :(得分:0)

是的,您对使用公式排序列是正确的,但问题是我在表单中有大量数据,在排序或应用计算时,工作簿需要很长的时间来计算结果,所以我使用了VBA