多步Vlookup

时间:2019-04-04 13:02:55

标签: excel vba excel-formula excel-2010 phpexcel

当前,我在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进行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

2 个答案:

答案 0 :(得分:0)

VLOOKUPS对于Excel来说非常消耗处理器,最好切换到更复杂(但更轻巧)的INDEX MATCH方法,在此进行详细说明:https://exceljet.net/index-and-match

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

答案 1 :(得分: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将从列表的顶部开始并检查每个单个值,直到找到精确匹配为止。因此,对于具有一百万行的列表,最多需要进行一百万次比较。

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

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