我在Windows 10上运行Excel 2013,内存为16 GB。
我有一个类似于下面图1的层次结构。我的结构是1000多行,深达27级。
对于如上所述的“树”,如何识别单元格的父级?
这是我到目前为止所做的。使用条件格式,以及此公式:
=AND(A1<>"",OFFSET(A1,1,1)="")
我能够识别树的叶节点,如下图2所示。
现在我需要找到树中每个单元格(子)的直接祖先(父级)(除了没有父级的第一行)。
图3(下图)显示了手动完成的示例:
此外,我可以将树与轮廓相关联。 然后我可以计算轮廓中的小数位数,以便使用以下公式跟踪水平变化:
=LEN(A2)-LEN(SUBSTITUTE(A2,".",""))
如下图4所示:
如何以编程方式完成图3中手动完成的工作?
对于每一行(记录在树外的一列中),打印作为单元格父级的单元格的位置。
这是一个类似的问题,手动提供“级别”信息。
How to find parent in an indented hierarchy?
在我的情况下,我需要使用大纲(如图所示)或使用条件格式的公式。
答案 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()
并以不同的方式使用计算的参考。