多步查找

Multi Step Vlookup

目前我在 EXCEL 中有 2 列。 PARENT_ID、GRAND_PARENT_ID.And 想弄清楚多层次的育儿问题。例如

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,但它只是 killing/freezing 我的会话。

我尝试了 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

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

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

如果您只为每个匹配返回一个值并且仍然使用精确匹配,那么从 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 万行的列表,需要多达 100 万次比较。

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

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