使用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()
并以不同的方式使用计算的参考。