【发布时间】: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 个值,因此性能提升