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

标签 excel vba

我目前有一个 Excel 工作表,其中包含缩进的项目层次结构,如下所示。
每个项目都缩进(每个缩进四个空格)以显示它如何适应整体层次结构。
我已经能够创建一个“级别”列,将缩进级别转换为数字。

    +------------+-------+--------+
    |    Item    | Level | Parent |
    +------------+-------+--------+
    | P1         |     1 | N/A    |
    |     P2     |     2 | P1     |
    |     P3     |     2 | P1     |
    |         P4 |     3 | P3     |
    |     P5     |     2 | P1     |
    |         P6 |     3 | P5     |
    +------------+-------+--------+

我想要做的是生成上面的“父级”列,它使用“级别”信息来显示每个项目的父级。
我认为这需要通过一个循环来完成对于每个项目 X :

    -Find level info for X
    -Find (levelx-1) which would equal the parent item's level
    -Search upward for the first row with a level equal to (levelx-1)
    -Find the item number in that row
    -Write item number in adjacent cell to X

不幸的是,我不知道如何将这个想法转化为 VBA。
提前感谢您的帮助。

最佳答案

好的,假设上表从单元格 A1 开始,有用数据从第 2 行开始。这个公式可以解决问题:

=INDEX($A$1:$A$7,MAX(IF($B$2:$B2=B2-1,ROW($B$2:$B2),"")))

在单元格 C2 中输入此内容作为数组公式 (Ctrl+Shift+Enter),然后将其下拉。第一个显然是一个错误(不是 #NA 而是 #VALUE)。

工作原理:

IF($B$2:$B2=B2-1,ROW($B$2:$B2),"")

这将创建一个数组,其中包含比实际值低一级的值的行号。要仅检查当前行上方的值,您需要使用扩展范围,因此需要使用 $B$2:$B2 样式引用。

MAX 函数获取这些行的最大值,即距离当前单元格最近的行。现在我们有了行号。我们现在需要的只是一个公式,用于从指定行的 A 列中提取数据。这就是 INDEX 的作用。

关于excel - 如何在缩进层次结构中找到父级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34753817/

相关文章:

c# - 在 C# 中将 CSV 数据填充到现有 Excel 模板

vba - 识别 VBA UDF 瓶颈

java - 在使用 poi 读取 Excel 文件之前保存其内容

html - 单击 VBA 中图像的第二个按钮

excel - 如何按 "numerical"顺序对大纲数字进行排序?

vba - 在表单中调用子程序

excel - 如何让 VBA 函数存储单元格地址值而不是这些单元格地址处的值

excel - 如果使用 VBA 中的全局变量不满足条件,则停止过程

excel - VBA 最长 Collat​​z 序列

vba - 使用宏获取路径时出错