Excel的崩溃
我有一些防火墙日志我找过,我想,这样的Excel显示我对每个IP的第一和最后的时间戳(两个单独的列)来排列。 我有五列的表格:Excel的崩溃
- ColumnA:唯一的IP地址(计数:1275)
- ColumnB:在哪里,我想第一个访问的时间是
- ColumnC:如果我想上次访问的时间是
- ColumnD:非uniqued IP地址(计数:300001)
- ColumnE:与第4列排列的非uniqued时间戳(计数:300001)
我的公式似乎可以在较小的数据集上正常工作,但是当我尝试这样做时,excel崩溃,可以理解,因为它是一个40万行的表。有没有办法让这个CPU占用更少,以便Excel能够完成这个任务?有没有更好的方法来做到这一点?下面是此次的公式我使用:
=MIN(IF(A1=D1:D400001,E1:E400001))
按Ctrl + Shift + Enter
谢谢!
当处理这么多行数据时,最好的办法是创建一个数据透视表(见下面的表格)。枢轴桌非常快,适合于这种情况。
1.放置IP地址(非唯一的IP地址栏)上的 “行”。
2。拖放“VALUES”上的TimeStamps(非唯一时间戳记列)。这将默认为SUM或COUNT,但使用字段设置可将其更改为MIN。
再次在“VALUES”上拖动TimeStamps,这次将字段设置更改为MAX。
这张表实际上会给你与使用MINIF和MAXIF公式相同的结果。
正如Tom Sharpe指出的那样,数据透视表将仅列出在“非唯一IP地址”列中找到的可能包含或不包含全部1,275个唯一IP地址的IP地址。为了解决这个问题(如有必要),您可以使用数据透视表本身作为查找表创建一个公式,并将这些值返回到原始电子表格。
数据透视表非常强大。谢谢你,先生,这样做了! – Alkthree
这种老派的做法如何?我的公式开始第2行,因为我喜欢的列标题进行排序的: -
(1)分类上山坳d那么E
(2)使用MATCH(,, 0),以获得第一次约会每个IP数&指数B2: -
=IFERROR(INDEX(E$2:E$300000,MATCH(A2,D$2:D$300000,0)),"")
(3)使用MATCH(,, 1),以获得在C2每个IP数& 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 。
它标记为Excel中,但它也是东西,将很容易被任何SQL数据库进行处理。
它必须是一个公式吗?你能转发数据吗?将IP地址放在行上,并在值上加上时间戳(按最小值汇总值字段)。 – rwilson
你为什么要看10万空白行?你的公式说“D1:D400001”,但你的叙述状态*'数:300,001'*在同一范围内。 – Jeeped
如果你已经删除了所有的条件格式,自定义格式等,并保留原始数据,那么你应该没有问题。您的数组公式在54.04秒内通过1275个唯一的IP在真实的400K非空值上运行。我测试了一个[AGGREGATE](https://support.office.com/en-us/article/AGGREGATE-function-43B9278E-6AA7-4F17-92B6-E19993FA26DF)等价物,它的运行速度为66.85秒。考虑到旧笔记本电脑上的数据量,不要闪电般快速但完全可以接受。 – Jeeped