2013-10-29 49 views
0

我有一個Excel表格,其中包含具有開始日期,開始時間和結束時間的電話。我想找到一種方法來循環調用,以查看每次通話期間有多少電話中繼線正在使用。可能有更好的方法來檢查這一點,但這是我正在考慮使用的邏輯。循環通過Excel中的一系列單元格

在單元格C1中,我有本月第一次調用的開始時間。在D1中,我有該呼叫的結束時間。我知道在第一次通話開始時只有一條中繼線正在使用。我需要遍歷每個呼叫,以查看在當前檢查呼叫之前的任何呼叫的結束時間是否大於正在檢查的當前呼叫的開始時間。

因此,工作真的從第二行開始,並檢查C2(呼叫2的呼叫開始時間)是否爲<D1(呼叫1的結束時間)。

通過下一個循環將檢查是否C3 < D1然後檢查是否C3 < D2。如果任何檢查爲真,則稱爲Trunks(起始值爲1)的值將遞增1.一旦行檢查完成,中繼線將被寫入到與檢查的行對應的列E中。

下一個循環將檢查是否C4 < D1然後C4 < D2然後C4 < D3和中繼線的值寫至E4

接着就到C5等等,直到片材的端部。該表將從12,000行到15,000行。

這可以通過在VBA中的子?任何人都可以幫我寫這個子文件嗎?這裏是C1 - C11和D1 - D11的值。在下面的示例中,每行中的trunk值爲1,直到您到達第7行爲止,因爲第7行(6:10:05)中的呼叫開始時間小於第6行呼叫的結束時間( 6:10:59),這意味着兩個呼叫同時發生,所以中繼線將等於2.

C1 2:44:00 AM D1 2:45:08 AM 
C2 3:30:15 AM D2 3:33:10 AM 
C3 4:02:50 AM D3 4:04:12 AM 
C4 4:48:15 AM D4 4:48:32 AM 
C5 6:02:25 AM D5 6:03:57 AM 
C6 6:08:54 AM D6 6:10:59 AM 
C7 6:10:05 AM D7 6:10:34 AM 
C8 6:10:05 AM D8 6:10:41 AM 
C9 6:23:30 AM D9 6:29:07 AM 
C10 6:36:28 AM D10 6:39:54 AM 
C11 7:16:56 AM D11 7:24:56 AM 

在此先感謝!

+4

'誰能幫我寫這個子文件嗎?'呃,它不能在這裏工作:)所以你需要付出一些努力,然後告訴我們你試過了什麼,然後我們幫助你:)詢問代碼的問題必須證明對所解決問題的最小理解。包括嘗試解決方案,爲什麼他們沒有工作,以及預期的結果。另請參閱:[堆棧溢出問題清單](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist) –

+0

我嘗試使用excel中的幾個函數,包括countif和if語句,但我不能循環遍歷單元格範圍並將它們與另一個單元格中的值進行比較。我相當確信它需要在VBA中完成,但我不知道如何開始VBA代碼。我知道如何到Excel中的VBA,但我不確定這是一個子程序還是一個函數。對於比VBA更熟悉VBA的人來說,這可能相當簡單。如果您不能發送代碼來執行此操作,有人可能會指向一些VBA代碼,這些代碼將循環通過單元格C2 - C100,然後將其與D1 - D99進行比較? – user2933813

+0

我不確定它還需要VBA。你可以使用內置的公式做一些非常瘋狂的事情。 – digitlworld

回答

2

你不一定需要VBA。嘗試以下操作,調整數據範圍。在這種情況下,您不能使用完整的列引用,否則公式將需要很長時間才能運行。

=SUM(IF(C$1:C$11<=C1,IF(D$1:D$11>=C1,1,0),0)) 

當你進入這一點,你必須按CTRL+SHIFT+ENTER,而不是僅僅ENTER。你會知道它的工作原理,因爲Excel將用{}包圍公式。

{=SUM(IF(C$1:C$11<=C1,IF(D$1:D$11>=C1,1,0),0))} 

這是一個數組公式,或CSE公式。它將您指定範圍內的每個單元視爲單個實例。 IFs正在模擬AND操作。這基本上總結了開始時間爲<=的當前行開始時間和結束時間>=開始時間的行數。

該公式需要出現在每一行上。

這適用於上述示例,但不是完整的解決方案。有錯過的情況。

編輯:以下可能會涵蓋遺漏的情況。與上面相同的規則適用。然而,這仍然是您自己想要了解的東西,所以解釋非常簡單。

=SUM(IF(C$1:C$11<=C1,IF(D$1:D$11>=C1,1,0),IF(C1:C11>=C1,IF(C1:C11<=D1,1,0),0))) 
+0

不錯的一個使用數組公式 – Joop

+0

感謝您的協助。我能夠將數組公式簡化爲= SUM(IF(K $ 1:K1> = J2,1,0)),並將公式複製到每一行,並且效果很好。 – user2933813

0

循環通過一組單元格,將其與另一列中的值進行比較的基本思路如下所示。我在其中一個程序中使用過類似的程序。現在,您可以使用符合您要求的if/else邏輯。

For rowIndex = 2 To lr2 

calcFormula1 = (Application.SumIf(Range("C2:C100"), Range(rowIndex, "D2:D99").Text, Range("E:E"))) 

Cells(rowIndex, "O").Value = calcFormula1 

Next rowIndex 
相關問題