我有一些我正在查看的防火墙日志,我想安排它们,以便excel显示每个IP的第一个和最后一个时间戳(两个单独的列)。 我有一个包含五列的表格:
我的公式似乎可以在较小的数据集上正常工作,但是当我尝试这样做时,excel崩溃,这是可以理解的,因为它是一个400k的行表。有没有办法减少CPU占用,以便Excel完成此操作?有没有更好的方法来做到这一点?这是我目前使用的公式:
=MIN(IF(A1=D1:D400001,E1:E400001))
CTRL + SHIFT +输入
谢谢!
答案 0 :(得分:2)
在处理这么多行数据时,最好的办法是创建一个数据透视表(参见下表)。数据透视表非常快,非常适合这种情况。
1. 将IP地址(非唯一IP地址列)放在" ROWS"。
2. 在" VALUES"上拖动TimeStamps(非唯一时间戳列)。这将默认为SUM或COUNT,但使用字段设置您可以将其更改为MIN。
3 再次将TimeStamps拖到" VALUES"这次将字段设置更改为MAX。
这个表几乎可以为您提供与使用MINIF和MAXIF公式相同的结果。
正如Tom Sharpe所述,数据透视表只会列出在非唯一IP地址列中找到的IP地址,该列可能包含也可能不包含所有1,275个唯一IP地址。要解决此问题(如有必要),您可以使用数据透视表本身作为查找表创建公式,并将值重新带回原始电子表格。
答案 1 :(得分:0)
这种老派方法怎么样?我的公式从第2行开始,因为我更喜欢列标题进行排序: -
(1)按照col D排序,然后按E
(2)使用MATCH(,, 0)获取每个IP号码的第一个日期& B2中的INDEX: -
=IFERROR(INDEX(E$2:E$300000,MATCH(A2,D$2:D$300000,0)),"")
(3)使用MATCH(,, 1)获取每个IP号码的最后日期& C2中的INDEX: -
=IF(B2="","",INDEX(E$2:E$300000,MATCH(A2,D$2:D$300000,1)))
如果B2中的公式找不到匹配项,因为A2中的IP地址尚未使用,则在B2和C2中都显示空白。
我在一台普通PC上运行了一些模拟数据,排序时间大约为5秒,更新公式的时间也相似。
值得考虑大量数据,因为排序时间比nlog(n)更高,而不是n 2 。
它被标记为Excel,但它也可以被任何SQL数据库轻松处理。