2016-01-03 106 views
0

请在需要帮助时使用可能会复杂的公式, 重述,此表具有用户名,间隔,聊天开始时间和聊天结束时间, 我需要导出免费时间,代理没有任何聊天时间,因此该试剂可以具有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

在回顾一下,这片获得免费的时间(GAP)之间的“上次”与“开始时间),但不完全,有什么出错,我不能得到它

如图

彩色单元格指的是发生错误的值。由于UDF结果0返回,而他们是自由时间按“上次”之间的差距与“开始时间)

workbook

非常感谢,

回答

0

我不知道你为什么要创建此宏这可以用一个简单的公式的帮助下进行使用以下步骤:a。

  1. 排序表中升序的顺序(从小到大)与Agent Name在第一级,然后Visit Time在第二级,这会给你列出了每个代理人都按顺序访问所有时间的列表。
  2. Next在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 Name作为Column Label,Interval作为Row LabelsSum of Free Time作为值。这会给你一个整洁的表格,显示每个代理每个间隔的空闲时间。试验一下列标签和行标签以获得正确的布局。

这也可以用VBA完成,但我觉得这是做这件事最简单的方法。在为此处理VBA时,您可以执行完全相同的步骤和相同的逻辑来查找空闲时间。 快乐编码!

0

是的,你是正确的关于使用公式排序列,但麻烦的是我有一个巨大的数据量成片,当排序或应用计算,工作簿需要很长的过程弄清楚的结果,所以我使用了VBA

相关问题