Excel父列表链

时间:2013-11-13 19:19:26

标签: excel

我在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(我不熟悉)会更好,即使计算时间较长,因为当我需要重新访问时,它会增加我维护它的能力明年问题。

2 个答案:

答案 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将返回零。当列中的所有值都等于虚拟值时,您将检测何时不再有“级别”。