【问题标题】:Excel Vlookup too SlowExcel Vlookup 太慢了
【发布时间】:2014-11-24 18:01:33
【问题描述】:

我有一个 Excel 文件,它在大约 10000 行上使用 vlookup,每行 8 个 Vlookups。速度慢得离谱。

它会查找另一个在线的 excel 文件 -

=IF(ISERROR(VLOOKUP(E12,'Filepath.xlsx]Data'!$U:BV,54,0)),"None",VLOOKUP(E12,Filepath.xlsx]Data'!$U:BV,54,0))

我环顾四周,vlookup 似乎非常有必要。是否有可能的结构更改可以加快速度,例如 SQL 数据库上的 vlookups?

谢谢

【问题讨论】:

  • 尝试切换到索引/匹配组合。这将允许您每行只进行一次匹配。另外,请看:dailydoseofexcel.com/archives/2014/11/17/…
  • 您可以对ascending order 中的U 列进行排序吗?如果是这样,您可以使用 LOOKUP 公式,它会快得多,应该远远超过 50%,即 =IFERROR(IF(LOOKUP(E12,Filepath.xlsx]Data'!$U2:$U10000)<>E12,"None",LOOKUP(E12,Filepath.xlsx]Data'!$U2:$BV10000)),"None")
  • 删除一行(或 500 行)很慢,因为这会更改 VLOOKUP 范围,并且必须重新计算每个范围。
  • 也使用命名范围,它确实加快了繁重的工作表,但是是的,INDEX/MATCH 更好,更容易在设置后管理
  • 重新排序:排序只需要在“查找范围”(查找数组的第一列)上,当然,其他列也需要包括在内。你是说查找范围改变了吗?使用使用“二分搜索”的 LOOKUP 意味着 LOOKUP 需要评估大约 13 个 (=Log(10000,2) 值,而使用 VLOOKUP 则需要评估多达 10,000 个值,因此性能提升

标签: sql excel vlookup


【解决方案1】:

根据我的 cmets,使用带有排序查找范围的 LOOKUP 公式明显快于使用 VLOOKUP,在这种情况下快 100 倍以上,例如如果我使用这个公式做一些速度测试

=VLOOKUP(B3, $D$3:$D$10002, 1,0)

然后使用 G3:G10002 包含与 D3:D10002 相同的值,但按此LOOKUP 公式升序排序

=IF(LOOKUP(B3, $G$3:$G$10002) = B3, LOOKUP(B3, $G$3:$G$10002), NA())

公式产生完全相同的结果,但由于“二分搜索”的好处,第二个公式始终比第一个公式快 120-140

如果我使用 INDEX/MATCH 等效项,即

=INDEX($D$3:$D$10002,MATCH(B3, $D$3:$D$10002,0))

那么这实际上比 VLOOKUP 版本稍慢,尽管正如 Doug 所说,如果您在多次计算中使用相同的 MATCH 公式,那么您可以只计算一次以获得多个结果,这样可能比 VLOOKUP 更有效总之

当然,您的设置中可能还有其他因素会减慢计算速度.....

【讨论】:

    猜你喜欢
    • 2013-03-10
    • 2014-06-07
    • 2016-05-31
    • 2011-07-07
    • 2015-08-23
    • 2012-07-05
    • 2016-01-08
    • 2014-03-12
    • 2021-03-26
    相关资源
    最近更新 更多