簡體   English   中英

循環遍歷Excel中的一系列單元格

[英]Loop Through a range of cells in Excel

我有一張excel表,其中包含開始日,開始時間和結束時間的電話。 我想找到一種方法來遍歷呼叫,看看在每次通話期間我們有多少電話中繼線正在使用。 可能有更好的方法來檢查這個,但這是我正在考慮使用的邏輯。

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

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

下一個循環將檢查C3 <D1然后檢查C3 <D2。 如果任何檢查為真,那么名為Trunks(起始值為1)的值將增加1.一旦行檢查完成,Trunks將被寫入與要檢查的行對應的E列。

下一個循環將檢查C4 <D1然后C4 <D2然后C4 <D3並將中繼值寫入E4

然后到C5,依此類推,直到表格結束。 該表將從12,000行到15,000行。

這可以通過VBA中的sub來完成嗎? 任何人都可以幫我寫這個子嗎? 以下是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

提前致謝!

您不一定需要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)))

循環遍歷一堆單元格,將其與另一列中的值進行比較的基本思想如下所示。 我在其中一個程序中使用了類似的一個。 現在您可以使用符合您要求的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM