在Excel中更改轮廓的形状

我正在Windows 7上运行Office Professional Plus 2013。

有一个matrix如下图所示: 分类矩阵

完整的matrix数据可以在这个Google电子表格中find。 有两个选项卡 – 通用术语和特定术语。

matrix是用来分类的items – 如特定的植物。 有一些items分配给这个matrix,但没有显示出来减less复杂性。

matrix是一个归一化的matrix,意思是列是固定的 – matrix中有所有可能的值。 但是在许多情况下,列没有值(NULL值)。 例如,第8行的属是由kingdom : subkingdom : division : class : order : family : genus定义的kingdom : subkingdom : division : class : order : family : genus

subdivisionsubclasssuperordersuborderfamily不用于定义特定的属。 相比之下,第14行的属性由subdivision定义。

使用符号,规范化的matrix看起来如下: 符号矩阵

我们的目标是创build一个非规范化的matrix – 重塑一个列不再有意义的matrix,但只是大纲中的一个级别。 一般的做法是删除一个NULL单元格,然后在下一行中移动其依赖的“children”。

手动过程将是:

  1. 删除D5并向左移动Class
  2. 删除E6并向左移动Order
  3. 重复令人厌恶。

非归一化matrix看起来像这样:

在这里输入图像说明

幸运的是,前三列中的符号永远不是NULL(C常数) – 我们可以引用它们,但不需要移动它们。 但是在所有其他列中的符号的位置是可变的(V-variables),这取决于哪个空值已被删除。

有一个皱纹。 有些情况下,一个item (暗示,但没有显示)没有映射到genus 。 相反,该item被映射到更广泛的术语,如family 。 行15是family是terminal节点的例子; genus 用于定义这个item

如何创build一个Excel公式或脚本:

  1. 删除一个NULL位置
  2. 在删除NULL位置的行上移动该项
  3. 在与父单元格相关的下一行上,将术语移到左边?

如果使用名称( divisionsubdivisionclass等)比使用符号更容易,那没关系。 Google电子表格提供了通用术语和特定术语。

以下是基于公式的解决scheme的示例输出:

在这里输入图像说明

有2个帮手列( MN )。

M2公式(计算当前项目在行中的位置),用它填充列:

 =MATCH("*",A2:L2,0) 

N2公式(计算新行在行中的位置),用下列公式填充:

 =IF(M2-M1>0,N1+1,IFERROR(LOOKUP(2,1/($M$1:M1=M2),$N$1:N1),M2)) 

在O2中的公式只是把项目放在右栏,用它填满整个范围:

 =IF($N2=O$1,INDEX($A2:$L2,1,$M2),"") 

计算所有行需要一些时间,但我认为它会产生所需的输出。

编辑:

我想我在我的解决scheme中发现了一个bug, N2的公式应该是:

 =IF(M2-M1>0,N1+1,LOOKUP(2,1/($M$1:M1<M2),$N$1:N1)+1) 

我之前没有注意到它,因为它影响了第2468行( Amborellanae )。