我在Excel 2010中有一个包含两列的大表。列A是用户,列B是邀请用户的人。用户名是字母数字,包括一些只是数字的。最早的用户没有被邀请者。
User | Parent
-------------
AAA |
BBB |
CCC | AAA
DDD | BBB
EEE | DDD
FFF | DDD
GGG | FFF
HHH |
III | GGG
我想做的是有一个公式,允许我去祖父母(和曾祖父母,以及更远),所以我试图找到一个基于公式的解决方案,使用混合相对和绝对适当的列。
上述链最多会达到四个,但我有理由相信我的数据集最多不超过20个级别。我想找到一个公式或公式的组合,让我这样(并且,正如我所说,超越):
USER | PARENT | P2 | P3 | P4 | ...
AAA | |
BBB | |
CCC | AAA |
DDD | BBB |
EEE | DDD | BBB |
FFF | DDD | BBB |
GGG | FFF | DDD | BBB
HHH |
III | GGG | FFF | DDD | BBB
...
我尝试了各种方法结合VLOOKUP,MATCH和INDEX命令,有或没有一行用户ID号(因为当面对“0”的事实时,一些没有数字列的解决方案崩溃了一个有效的用户名,这使得错误捕获更加困难)。我可以非常可靠地到达P2,但是如果不打破它,我似乎无法进入P3。顺便说一下,我试过的公式是非常耗费CPU的,因为数据有近400,000行,但计算时间与我无关。我的蛮力方法不起作用。 stackoverflow上有几个类似的问题,但是他们要求稍微不同的东西,而且我无法适应它们中的任何一个。
如果可以通过标准函数完成,那么VBA(我不熟悉)会更好,即使计算时间较长,因为当我需要重新访问时,它会增加我维护它的能力明年问题。
答案 0 :(得分:1)
尝试以下公式:=IFERROR(VLOOKUP(C5,UserParent,2,FALSE) & "","")
,将UserParent
替换为绝对引用的列对(例如$B$5:$C$30
)或适当的命名范围。将其复制并穿过祖父母列。
我认为这是您之前尝试过的方法,但最终会在输出中出现一堆零。该公式中的多汁位是& ""
。这会强制将父列中的空单元格视为空字符串,而不是VLOOKUP
执行其工作时的零值单元格。这将删除所有那些使输出变为粗糙的零。
我能够使用一堆随机字母数字,但没有样本数据,这是我能做的最好的。
答案 1 :(得分:0)
正如您所指出的那样,0作为有效用户名存在是一个真正的问题 - 因为对于没有名称的VLOOKUP()
(以及等同于INDEX(,MATCH())
),它也会作为值返回父母。
另一种策略是使用一些未出现在User或Parent列中的虚拟值(例如-99999)来表示缺少的父级,并将其添加到“父级”列中的任何空单元格中。用户/父表。还要在此表中添加一行,在User和Parent列中使用相同的虚拟值。现在,如果0确实是您尝试查找其父级的单元格的父级,则VLOOKUP将返回零。当列中的所有值都等于虚拟值时,您将检测何时不再有“级别”。