0

我在 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。顺便说一句,考虑到数据接近 400,000 行,我尝试过的公式非常占用 CPU,但计算时间并不太关心我。我的蛮力方法不起作用。关于 stackoverflow 有几个有点相似的问题,但他们要求的东西略有不同,我无法适应其中的任何一个。

如果这可以通过标准函数完成,那将比 VBA(我不熟悉)更可取,即使计算时间更长,因为它会增加我在明年需要重新访问这个问题时维护它的能力.

4

2 回答 2

1

试试这个公式:=IFERROR(VLOOKUP(C5,UserParent,2,FALSE) & "",""),替换UserParent为绝对引用的列对(例如$B$5:$C$30)或适当的命名范围。将其复制到您的祖父母列中。

我敢打赌这是您之前尝试过的方法,但您最终会在输出中得到一堆零。这个公式中多汁的一点是& ""VLOOKUP这会强制父列中的空单元格在其工作时被视为空字符串,而不是零值单元格。这将删除所有影响输出的零。

我能够让它与一堆随机的字母数字一起工作,但没有样本数据,这是我能做的最好的。

于 2013-11-13T22:08:07.600 回答
0

正如您所指出的,0 作为有效用户名的存在是一个真正的问题 - 因为对于没有父母的名称,这也会作为值返回VLOOKUP()(和等效地INDEX(,MATCH()))。

另一种策略是使用一些在用户或父列中都没有出现的虚拟值,例如 -99999,来表示不存在的父级,并将其添加到用户/父级的父列中的任何空单元格的位置桌子。还要在此表中添加一行,在 User 和 Parent 列中使用相同的虚拟值。现在,如果 0 确实是您尝试查找其父级的单元格的父级,则您只会得到 VLOOKUP 返回的零。当列中的所有值都等于虚拟值时,您将检测到何时不再有“级别”。

于 2013-11-13T22:44:47.100 回答