kd, re your PM,

My formula doesn't solve the problem. It was one I created to make a tabular org chart starting from a two column list of {employee, supervisor}, and it assumed by definition that each child has exactly one parent, other than the top dog, who has none.

C
D
E
F
G
H
I
J
K
2
ID
Spon ID
Spon ID
Spon ID
Spon ID
Spon ID
Spon ID
Spon ID
Spon ID
3
050180
4
050226 050180
5
052322 050226 050180
6
053075 050226 050180
7
071009 050226 050180
8
081168 071009 050226 050180
9
117995 081168 071009 050226 050180
10
323848 117995 081168 071009 050226 050180
11
323991 117995 081168 071009 050226 050180
12
130637 081168 071009 050226 050180
13
326896 130637 081168 071009 050226 050180
14
340248 130637 081168 071009 050226 050180
15
401300 340248 130637 081168 071009 050226 050180


That's not the case here, when any given assembly ("child", down to the component level) can be used in multiple higher-level assemblies ("parent"). I did not read your code closely, but this kind of data structure

z1.Add key:=a(i, 2), Item:=Array(a(i, 2), New Collection)
... was what I was trying to get my brain moving toward.

Nice work.