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

时间:2017-01-01 14:23:07

标签: excel

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

我有一个类似于下面图1的层次结构。我的结构是1000多行,深达27级。

hierarchy

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

这是我到目前为止所做的。使用条件格式,以及此公式:

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

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

conditional formatting

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

图3(下图)显示了手动完成的示例:

enter image description here

此外,我可以将树与轮廓相关联。 然后我可以计算轮廓中的小数位数,以便使用以下公式跟踪水平变化:

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

如下图4所示:

enter image description here

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

对于每一行(记录在树外的一列中),打印作为单元格父级的单元格的位置。

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

How to find parent in an indented hierarchy?

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

1 个答案:

答案 0 :(得分:4)

根据您的规则,单元格的父级是第一个非空单元格,从下到上,位于左侧的列中:

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,你必须找到一种方法将End(xlUp)转换为一个可能证明困难的公式,因为Excel查找work from top to bottom并且你想要反过来。如果我这样做,我会从Last non-empty cell in a column开始。

鉴于层次结构包含在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 + 输入)。

    信用额转到https://stackoverflow.com/a/5442955/11683,因为它只不过是=INDEX(A:A,MAX((A:A<>"")*(ROW(A:A))))的动态版本。

  • 将所有内容拖下来。

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