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

Jay*_*ray 3 excel

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

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

等级制度

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

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

  =AND(A1<>"",OFFSET(A1,1,1)="")
Run Code Online (Sandbox Code Playgroud)

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

条件格式

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

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

在此输入图像描述

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

  =LEN(A2)-LEN(SUBSTITUTE(A2,".",""))
Run Code Online (Sandbox Code Playgroud)

如下图4所示:

在此输入图像描述

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

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

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

如何在缩进层次结构中找到父级?

就我而言,我需要根据大纲(如图所示)或使用条件格式的公式进行工作。

GSe*_*erg 5

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

public function GetParentCell(byval c as range) as range
  set GetParentCell = c.offset(0,-1).end(xlUp)
end function
Run Code Online (Sandbox Code Playgroud)

将其放入模块后,您可以从工作表中使用它,例如

=CELL("address", GetParentCell(D4))
Run Code Online (Sandbox Code Playgroud)

显示 的父级的地址D4

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

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

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

  • 您错过了“作为数组公式(CTRL+Shift+Enter)”,不是吗? (2认同)