2016-01-03 104 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

相關問題