Excel在大数组查找时崩溃

Excel在大数组查找时崩溃,excel,excel-formula,Excel,Excel Formula,我有一些正在查看的防火墙日志,我想对它们进行排列,以便excel显示每个IP的第一个和最后一个时间戳(两个单独的列)。 我有一个有五列的表: 列A:唯一IP地址(计数:1275) 专栏B:我希望第一次访问的时间在哪里 专栏C:我希望最后访问的时间在哪里 第D列:非唯一IP地址(计数:300001) ColumnE:与第4列对齐的非唯一时间戳(计数:300001) 我的公式在较小的数据集上似乎运行良好,但当我尝试这样做时,excel崩溃了,这是可以理解的,因为它是一个400k行的表。有没有办法

我有一些正在查看的防火墙日志,我想对它们进行排列,以便excel显示每个IP的第一个和最后一个时间戳(两个单独的列)。 我有一个有五列的表:

  • 列A:唯一IP地址(计数:1275)
  • 专栏B:我希望第一次访问的时间在哪里
  • 专栏C:我希望最后访问的时间在哪里
  • 第D列:非唯一IP地址(计数:300001)
  • ColumnE:与第4列对齐的非唯一时间戳(计数:300001)
我的公式在较小的数据集上似乎运行良好,但当我尝试这样做时,excel崩溃了,这是可以理解的,因为它是一个400k行的表。有没有办法减少CPU占用,让Excel完成这项工作?有没有更好的办法?以下是我目前使用的公式:

=MIN(如果(A1=D1:D400001,E1:E400001))

ctrl+shift+enter


谢谢大家!

这种老办法怎么样?我的公式从第2行开始,因为我更喜欢列标题进行排序:-

(1) 按D列排序,然后按E列排序

(2) 使用匹配(,,0)获取B2中每个IP编号和索引的第一个日期:-

=IFERROR(INDEX(E$2:E$300000,MATCH(A2,D$2:D$300000,0)),"")
(3) 使用匹配(,,1)获取C2中每个IP编号和索引的最后日期:-

=IF(B2="","",INDEX(E$2:E$300000,MATCH(A2,D$2:D$300000,1)))
如果B2中的公式因A2中的IP地址未被使用而找不到匹配项,则B2和C2中均显示空白

我在一台普通电脑上运行了一些模拟数据,排序大约需要5秒钟,更新公式也需要同样的时间

由于排序时间增加为nlog(n),而不是n2,因此需要考虑更大数量的数据


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

处理这么多行数据时,最好创建一个透视表(见下表)。数据透视表速度非常快,非常适合这种情况

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

2.拖动“值”上的时间戳(非唯一时间戳列)。这将默认为总和或计数,但使用字段设置可以将其更改为最小值

3再次拖动“值”上的时间戳,这次将字段设置更改为最大值

此表将实际提供与使用MINIF和MAXIF公式相同的结果


正如Tom Sharpe所指出的,pivot表将只列出在非唯一IP地址列中找到的IP地址,其中可能包括也可能不包括所有1275个唯一IP地址。要解决这个问题(如果需要),您可以使用透视表本身作为查找表创建一个公式,并将值返回到原始电子表格。

它必须是一个公式吗?你能把数据转过来吗?将IP地址放在行上,时间戳放在值上(按最小值汇总值字段)。为什么要查看100000个空行?您的公式显示的是
D1:D400001
,但您的叙述说明的是同一范围的“计数:300001”。如果您删除了所有条件格式、自定义格式等,并保留了原始数据,那么您应该不会有问题。您的数组公式在54.04秒内通过1275个唯一IP,覆盖了一个真正的400K非空值。我用一个跑得慢66.85秒的等效物来测试它。不是闪电般的快,但考虑到旧笔记本电脑上的数据量,这是完全可以接受的。@rwilson我用与我的答案中相同的数据尝试了pivot,我不得不承认它比排序更快更简单;-)我的排序/匹配/索引的唯一优点可能是,如果您想报告1275个IP地址的整个列表,并为未使用的IP地址显示空白-透视图仅显示300000个列表中实际使用的IP地址。但我猜它们可能都会被使用。透视表非常强大。谢谢你,先生,成功了!