0

我有一个 Excel 表,其中包含开始日期、开始时间和结束时间的电话。我想找到一种方法来循环呼叫,以查看每次呼叫期间我们有多少电话中继正在使用中。可能有更好的方法来检查这一点,但这是我正在考虑使用的逻辑。

在单元格 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 行之前,每行中的中继值将是 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

提前致谢!

4

2 回答 2

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)))
于 2013-10-29T21:29:48.107 回答
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
于 2015-07-27T21:48:37.857 回答