多步Vlookup

问题描述 投票:0回答:2

目前我在EXCEL中有2列。 PARENT_ID,GRAND_PARENT_ID。想要找出多层次的育儿问题。例如

PARENT_ID 111 rolls to GRAND_PARENT_ID 222
AND
PARENT_ID 222 rolls to GRAND_PARENT_ID 333
AND 
PARENT_ID 333 rolls to GRAND_PARENT_ID 444

Until PARENT_ID = GRAND_PARENT_ID.

所以我需要弄清楚PARENT_ID正在滚动多少级别。我喜欢数百万行,并试图找出一个vlookup,但它只是杀死/冻结我的会话。

我尝试将vlookup GRAND_PARENT_ID发送到PARENT_ID,然后再次获取存在的块,然后再次向PARENT_ID.its执行vlookup,只是冻结我的会话,因为我有数百万行

PARENT_ID   GRAND_PARENT_ID
111 222
222 333
333 444
444 444

预期结果:111 222 333 444 until the PARENT_ID to GRAND_PARENT_ID

excel vba excel-formula excel-2010 phpexcel
2个回答
0
投票

VLOOKUPS对Excel来说非常耗费处理器,你最好切换到更复杂(但更轻)的INDEX MATCH方法,这里有详细解释:https://exceljet.net/index-and-match

如果是一个选项,您还应检查并查看是否使用32或64位Excel。 (文件 - >帮助 - >屏幕右侧)。如果您的计算机是64位处理器,那么从32位Excel切换到64位Excel可能会给您带来很小的性能提升,因为Excel将利用您的更多计算机处理能力。


0
投票

如果你只为每场比赛返回一个值并且仍然使用精确匹配,那么从VLOOKUP到INDEX / MATCH几乎没有区别。

通过首先对数据进行排序并使用近似查找(在VLOOKUP或INDEX / MATCH中)可以获得巨大的收益。

首先按ParentID升序对数据进行排序,然后使用以下公式查找值:

=IF(VLOOKUP(ParentID,Data,1,TRUE)=ParentID, VLOOKUP(ParentID,Data,2,TRUE), NA())

如果您确定100%确定始终可以找到ParentID,则可以简化为:

=VLOOKUP(ParentID,Data,2,TRUE)

再次注意,您必须先按ParentID对数据进行排序。并且您必须排除数据范围中的列标题。

这样做更快,因为在进行完全匹配查找时,Excel将从列表顶部开始并检查每个值,直到找到完全匹配。因此,对于包含100万行的列表,这需要多达1百万次比较。

对于排序数据的近似匹配,Excel会进行二进制搜索。它检查中间数字,然后更高或更低,再次检查下一个中间数字,依此类推。在包含100万行的列表中,最多需要20次比较才能缩小到单个值,从而使其运行速度提高了50,000倍。

https://exceljet.net/formula/faster-vlookup-with-2-vlookups

© www.soinside.com 2019 - 2024. All rights reserved.