使用Excel,如何查找层次结构中的父级单元格?

我正在Windows 16上运行Excel 2013,内存为16 GB。

我有一个类似于下图1的分层结构。 我的结构是1000+行,深达27层。

等级制度

对于如上所述的“树”,如何识别单元格的父项?

这是迄今为止我所做的。 使用条件格式和这个公式:

=AND(A1<>"",OFFSET(A1,1,1)="") 

我能够识别树的叶节点,如下面的图2所示。

条件格式

现在我需要find树中每个单元格(子)的直接祖先(父)(除了没有父类的第一行之外)。

图3(下面)显示了一个手动完成的例子:

在这里输入图像说明

此外,我可以将树与大纲相关联。 然后,我可以计算大纲中的小数位数,以便使用以下公式跟踪级别更改:

  =LEN(A2)-LEN(SUBSTITUTE(A2,".","")) 

如下图4所示:

在这里输入图像说明

如何以编程方式完成图3中手动完成的操作?

对于每行(logging在树外的列中),打印单元格的父级单元格的位置。

这是一个类似的问题,手动提供“级”的信息。

如何find父缩进层次?

在我的情况下,我需要从大纲(如图所示)或使用条件格式的公式。

根据你的规则,单元格的父元素是从左到右的列中的第一个非空元素,从下到上:

 public function GetParentCell(byval c as range) as range set GetParentCell = c.offset(0,-1).end(xlUp) end function 

把它放在一个模块中,你可以从表中使用它,例如

 =CELL("address", GetParentCell(D4)) 

显示D4父级的地址。

如果你想完全避免VBA,你必须find一种方法来将End(xlUp)转换成一个公式,这可能会很困难,因为Excel查找从上到下工作,而且你需要End(xlUp) 。 如果我这样做,我会从一个列中的最后一个非空单元格开始。

鉴于层次结构包含在A1:G19

  • H1 ,把:

     =MATCH("x",$A1:$G1,0) 
  • I1 ,放

     =CELL("address",INDEX(INDEX($A$1:$G$19,1,H1-1):INDEX($A$1:$G$19,ROW(),H1-1),MAX((INDEX($A$1:$G$19,1,H1-1):INDEX($A$1:$G$19,ROW(),H1-1)<>"")*(ROW(INDEX($A$1:$G$19,1,H1-1):INDEX($A$1:$G$19,ROW(),H1-1)))))) 

    作为数组公式( CTRL + Shift + Enter )。

    因为它不过是dynamic版本=INDEX(A:A,MAX((A:A<>"")*(ROW(A:A))))

  • 把所有东西都拖下

I的公式将每个单元格的父项作为一个真正的引用返回,然后由CELL()函数检查以显示地址。 您可以删除CELL()并以不同的方式使用计算的参考。