如何find父缩进层次?

我目前有一个excel表格,其缩进层次如下所示。
每个项目都缩进(每个缩进四个空格)以显示它如何适合整个层次结构。
我已经能够创build一个“级别”列,将缩进级别转换为数字。

+------------+-------+--------+ | Item | Level | Parent | +------------+-------+--------+ | P1 | 1 | N/A | | P2 | 2 | P1 | | P3 | 2 | P1 | | P4 | 3 | P3 | | P5 | 2 | P1 | | P6 | 3 | P5 | +------------+-------+--------+ 

我想要做的是生成上面的“父”列,它使用“级别”信息来显示每个项目的父项。
我认为这将需要做一个循环,这将为每个项目X做到这一点:

  -Find level info for X -Find (levelx-1) which would equal the parent item's level -Search upward for the first row with a level equal to (levelx-1) -Find the item number in that row -Write item number in adjacent cell to X 

不幸的是,我不确定如何将这个想法转化为VBA。
预先感谢您的帮助。

好的,假设上面的表在A1单元格开始,有用的数据从第2行开始。这个公式可以做到这一点:

 =INDEX($A$1:$A$7,MAX(IF($B$2:$B2=B2-1,ROW($B$2:$B2),""))) 

在单元格C2中input数组公式(Ctrl + Shift + Enter),然后将其拉下。 第一个显然是一个错误(不#NA#VALUE )。

怎么运行的:

 IF($B$2:$B2=B2-1,ROW($B$2:$B2),"") 

这会创build一个数组的行号,其值比实际值低一级。 要仅检查当前行上面的值,需要使用扩展范围,因此需要$B$2:$B2样式引用。

MAX函数获得这些行的最大值,这是最接近我们当前的单元格。 现在我们有行号。 我们现在需要的是一个公式从指定的行中提取列A的数据。 这是INDEX所做的。

我花了一段时间才明白这个公式是如何工作的,所以在弄清楚了之后(我的妻子帮了我一些忙),我想分享一个像我这样的其他Excel傻瓜的白痴解释。 开始了:

 =INDEX($A$1:$A$7,MAX(IF($B$2:$B2=B2-1,ROW($B$2:$B2),""))) 

手段:

  1. 范围$B$2:$B2值可以find所有等于B2-1值。
  2. 如果find它们,请列出等于B2-1的行号。 (行)
  3. 从行号列表中挑选最高的行号(称为号码X )。 (MAX)
  4. 返回$A$1:$A$7范围内的行号X中的值

    (警告!你的范围必须从第一行开始,这样行号和你范围内的行号相同,否则你必须修改公式。)