我目前有一张 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
but #VALUE
).
怎么运行的:
IF($B$2:$B2=B2-1,ROW($B$2:$B2),"")
这将创建一个数组,其中包含比实际值低一级的值的行号。仅检查值above当前行,您需要使用扩展范围,因此$B$2:$B2
风格参考。
The MAX
函数获取这些行的最大值,这是最接近我们当前单元格的。现在我们有了行号。我们现在需要的是一个从列中提取数据的公式A
从指定的行。这是什么INDEX
does.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)