我需要使用 VBA 脚本或列公式将 Excel 文件中的层次结构转换为父/子列。
例如这是起始文件,其中子文件是从左到右的第一个非空白条目,父文件是从 1 个单元格向上到子文件左侧的第一个非空白条目:
我需要一种方法(VBA?)将列 D-I 转换为列 B 和 C(并将 K 列添加为 A 列)
所以输出将是:
我最大的困难是像 H6、7 和 8 这样的东西都有父代 G5,而 G5、9 和 12 都有父代 F4。
步骤(至少在我的脑海中,如果使用 VBA - 尽管我可能会感到困惑/过于复杂):
如果有一种基于公式的方法可以做到这一点,我非常乐意使用它,因为它可能更容易实现?
提前致谢。
您可以填写以下一组公式,无需使用 VBA。 (这些可能无法在早期版本的 Excel 中运行)
所有公式都将写入工作簿的第 3 行。
A 列相当简单:
=$K3
TAKE
函数、TOCOL
函数 和 CHOOSECOLS
函数
B 栏:
=TAKE(TOCOL(CHOOSECOLS($D$1:$I2, MATCH($C3, $D3:$I3, 0)-1), 3), -1)
C 栏:
=TAKE(TOCOL($D3:$I3, 3), 1)
(C 列的替代方案可以是
=TEXTJOIN("", TRUE, $D3:$I3)
)
C 列仅获取当前行,使用
TOCOL
删除所有空白单元格或错误值,然后使用 TAKE
返回第一个剩余条目。
然后,B 列查看哪一列包含 C 列中的值(使用
MATCH
),获取 前一列(使用 CHOOSECOLS
),并使用
TOCOL
删除所有空白单元格或错误值。 然后它使用
TAKE
返回 last剩余条目(因此它是
-1
:负数从末尾向后计数)如果您想在 VBA 中使用这些,您可以设置
Range.Formula
,然后设置
Calculate
范围(或工作表),最后设置
Range.Value = Range.Value
来“展平”数据。