当前,我在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
答案 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倍。