循环通过Excel中的一系列单元格

我有一个Excel表格,包含开始date,开始时间和结束时间的电话。 我想find一种方法来循环调用,以查看每次通话期间有多less电话中继线正在使用。 可能有更好的方法来检查,但这是我正在考虑使用的逻辑。

在单元格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中的子? 任何人都可以帮我写这个子? 这里是C1 – C11和D1 – D11的值。 在下面的例子中,直到你到达第7行,每行中的trunk值为1.由于第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)) 

当你input这个时,你必须按CTRL+SHIFT+ENTER而不是ENTER 。 您将知道它的工作原理,因为Excel将用{}包围公式。

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

这是一个数组公式,或CSE公式。 它将您指定范围内的每个单元视为单个实例。 IFs正在模拟AND操作。 这基本上是将开始时间<=当前行的开始时间,结束时间>=开始时间的行数相加。

这个公式需要出现在每一行上。

这适用于上面的示例,但不是一个完整的解决scheme。 有错过的情况。

编辑:以下可能会涵盖遗漏的情况。 与上面相同的规则适用。 然而,这仍然是你自己学习的东西,所以解释是很轻的。

 =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