use*_*742 3 microsoft-excel-2007 worksheet-function microsoft-excel microsoft-excel-2010
我有大量数据需要处理。在 A 列中,我有一个用户名,在 BI 列中有一个会话开始日期/时间,在 CI 列中有会话结束日期/时间。
我正在尝试根据用户帐户计算任何时候正在进行的并发会话数。我遇到的难题是一个用户可能同时进行多个会话。
例如:
User Start Time End Time Desired Result (license count)
JW 03/24/2015 14:00:44 03/24/2015 14:09:57 --> 4
TT 03/24/2015 13:58:14 03/24/2015 14:21:08 --> 3
DQ 03/24/2015 13:53:10 03/24/2015 14:15:39 --> 3
BB 03/24/2015 13:50:55 03/24/2015 14:20:42 --> 2
BA 03/24/2015 13:43:02 03/24/2015 13:57:26 --> 2
JW 03/24/2015 13:40:30 03/24/2015 13:48:38 --> 1
BA 03/24/2015 13:18:26 03/24/2015 13:18:44 --> 1
BA 03/24/2015 13:15:18 03/24/2015 13:15:22 --> 1
CT 03/24/2015 11:56:55 03/24/2015 11:58:21 --> 1
CT 03/24/2015 11:53:23 03/24/2015 11:56:55 --> 1
CT 03/24/2015 11:51:50 03/24/2015 11:53:23 --> 1
CT 03/24/2015 11:48:11 03/24/2015 12:16:36 --> 1
CT 03/24/2015 11:36:54 03/24/2015 11:37:50 --> 1
CT 03/24/2015 11:33:52 03/24/2015 11:39:38 --> 1
CT 03/24/2015 11:31:25 03/24/2015 11:34:01 --> 1
Run Code Online (Sandbox Code Playgroud)
第四列显示了我希望能够用公式计算的结果。以上数据可以用图形表示为:
?
正如您在示例末尾(以及图表底部)所看到的,用户 CT 一次有多个会话。这些连接将仅计为一个许可证。
如果我需要澄清这一点,请告诉我。
假设您的数据在列A中C,从第 2 行开始,那么您可以在D2
=SUM(IF(FREQUENCY(IF(B$2:B$16<=B2,IF(C$2:C$16>=B2,MATCH(A$2:A$16,A$2:A$16,0))),ROW(A$2:A$16)-ROW(A$2)+1),1))
确诊CTRL+ SHIFT+ENTER和抄下来列
解释:
这是一种常用技术,用于获取一列(在本例中为用户)中不同值的计数,其中其他列中满足某些条件(在本例中,最新开始时间/日期介于开始时间/日期和结束时间之间)其他列中的时间/日期)。
“数据数组”是满足时间条件的行FREQUENCY的MATCH函数结果-MATCH并将找到第一个匹配值,因此您有重复用户MATCH为每个返回相同的数字(并且您得到FALSE条件的行没有遇到)
该FREQUENCY“箱”包含了所有可能的结果MATCH(在这种情况下,1至15),所以如果条件(该时间段包含了最迟开始时间)得到满足,用户是一样的,同样的数量在返回数据数组和它一样bin......所以计算> 0的bin数量就足够了,以获得不同用户的数量。
例如,专门针对第 2 行,数据数组变为:
{1;2;3;4;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}
并且将 4 个不同的值返回到 4 个不同的 bin,因此您得到的结果为 4
....但对于第 10 行,数据数组变为:
{FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;9;9;FALSE;9;FALSE;FALSE;FALSE}
其中有 3 行与时间条件匹配.....但都是针对同一个用户 ( CT),因此该MATCH函数A2:A16为所有三个返回 9(第一个“CT”条目的位置),因此FREQUENCY获得 3 个值在同一个 bin 中,所以公式解析为:
=SUM(IF({0;0;0;0;0;0;0;0;3;0;0;0;0;0;0;0},1))
该IF函数为由返回的数组中的每个非零值返回一个 1FREQUENCY并将SUM这些 1 求和.....但只有一个非零值所以结果是1(表示当时打开会话的不同用户的数量)
见附截图

| 归档时间: |
|
| 查看次数: |
16403 次 |
| 最近记录: |