Excel大型数组查找崩溃

我有一些防火墙日志,我正在查看,我想安排他们,让Excel显示我每个IP的第一个和最后一个时间戳(两个单独的列)。 我有一个五列的表:

  • ColumnA:唯一IP地址(计数:1,275)
  • ColumnB:我想要第一次访问的时间
  • 列C:我希望最后访问的时间是
  • ColumnD:非唯一IP地址(数量:300,001)
  • 列E:与第4列alignment的非唯一时间戳(计数:300,001)

我的公式似乎在较小的数据集上工作正常,但当我尝试这样做时,excel崩溃,可以理解,因为它是一个40万行的表。 有没有办法使这个CPU的密集度更低,使Excel完成这个? 有没有更好的方法来做到这一点? 这是我正在使用的当前公式:

=MIN(IF(A1=D1:D400001,E1:E400001))

Ctrl + Shift +回车

谢谢!

处理这么多行数据时,最好的办法是创build一个数据透视表(见下面的表格)。 枢轴桌是非常快的,是这样的情况下完美的。

在这里输入图像说明

1.将IP地址(非唯一IP地址列)放在“ROWS”上。

2.在“VALUES”上拖动TimeStamps(非唯一时间戳列)。 这将默认为SUM或COUNT,但使用字段设置可以将其更改为MIN。

3再次拖动“VALUES”上的TimeStamps,这次将字段设置更改为MAX。

这个表格实际上会给你与使用MINIF和MAXIF公式相同的结果。

正如Tom Sharpe指出的那样,数据透视表将只列出在“非唯一IP地址”列中find的可能包含或不包含全部1,275个唯一IP地址的IP地址。 为了解决这个问题(如有必要),您可以使用数据透视表本身作为查找表创build一个公式,并将这些值重新转换为原始电子表格。

这个老派的方法怎么样? 我的公式从第2行开始,因为我更喜欢列标题做一个sorting: –

(1)按col Dsorting然后按E

(2)使用MATCH(,, 0)获取B2中每个IP号码和索引的第一个date:

 =IFERROR(INDEX(E$2:E$300000,MATCH(A2,D$2:D$300000,0)),"") 

(3)使用MATCH(,, 1)获取C2中每个IP号码和索引的最后date:

 =IF(B2="","",INDEX(E$2:E$300000,MATCH(A2,D$2:D$300000,1))) 

如果B2中的公式没有find匹配,因为A2中的IP地址尚未使用,则在B2和C2中都显示一个空白。

我在一台普通的PC上运行了一些模拟数据,花费了大约5秒的时间进行sorting,并且用相似的时间来更新公式。

值得考虑的数据量较大,因为sorting时间上升为nlog(n),而不是n 2

它被标记为Excel,但它也可以被任何SQL数据库轻松处理。