有没有一种简单的方法可以将格式不佳的树重新格式化为双列表?

时间:2013-10-01 19:01:53

标签: excel excel-vba database-design data-structures vba

我有一个表格,表示一系列组件及其子组件,以及子组件各自的子组件,等等。它目前看起来像一棵树(一对多关系),但它可能在某些时候改变为类似图形(多对多关系)。不幸的是,它的作者格式很差,看起来像这样:

Poorly-formatted table

上述格式很差,因为存在大量数据重复,并且限制为一组(4)层。如果它看起来像这样,我宁愿选择:

Nicely-formatted table

上述格式很好,因为数据重复很少,并且不限于一定数量的层。

如果对表格所代表的内容有任何疑惑,这里是数据的图形表示:

graphical tree

从糟糕的格式转换为漂亮的格式很简单,但是有数百个根组件,手动数据输入将非常耗时且乏味。

我怀疑这个问题是独一无二的,我准备自己编写一些VBA代码来将表格解析成漂亮的格式,但我想我确保这不是预卷解决方案的常见问题在我自己推出之前。

是否有技术术语来描述第一个表格中的不良格式?有没有比编写VBA宏更简单的方法来重新格式化数据?

2 个答案:

答案 0 :(得分:1)

这可能是一个完全失常,但它适用于您的样本(目前我没有时间打破它!)

添加索引(及其标签)和reverse pivot(例如,请参阅An excel formula to find a row/column index in array)。 不要向下钻取Grand Total截距,而是深入了解各层的总数。

并排重新组合表格,删除除Value之外的所有列,并使用选择性粘贴值将表复制到另一个区域。删除范围上的重复项。每次右侧列中的值不会更改时,删除单元格中的值并将其移动到左侧。从右到左对列重新排序。

答案 1 :(得分:0)

我复制了Tier表中的每对相邻列(Tier 1& Tier 2Tier 2& Tier 3Tier 3 & Tier 4)并将它们垂直堆叠成一对列(Subcomponent& Component)。

接下来,我选择了两个新列,然后点击Remove Duplicates功能区标签中的Data,删除了重复项。

接下来,我必须删除Subcomponent列中包含空白单元格的所有行。为此,我再次选择了两列,并通过点击Filter功能区标签中的Data来过滤数据。我在(Blanks)列的Filter菜单中选择了Subcomponent,并删除了所有可见行。我在过滤器菜单中选择(Select All)删除了文件管理器。

结果表包含许多空行,所以我再次删除重复项,然后手动将数据向上移动一行以替换剩余的一行空白行。

最后,花了大约半个小时,这可能比我编写宏的时间少,而且手动数据输入的时间肯定更少。