在 Excel 中更改轮廓的形状

Change the shape of an outline in Excel

运行 Office Professional Plus 2013 Windows 7.

有一个如下图所示的矩阵:

在此 Google spreadsheet 中找到完整的矩阵数据。有两个选项卡 - 通用术语和特定术语。

矩阵用于分类items——比如特定的植物。已将 items 分配给此矩阵,但未显示以降低复杂性。

矩阵是归一化矩阵,这意味着列是固定的 - 矩阵中有适合所有可能值的位置。但在许多情况下,列没有值(NULL 值)。例如,第 8 行的属由 kingdom : subkingdom : division : class : order : family : genus.

定义

subdivisionsubclasssuperordersuborderfamily 不用于定义该特定属。相反,第 14 行的 genussubdivision.

定义

使用符号,归一化矩阵如下所示:

目标是创建一个 de-normalized 矩阵 - 重塑矩阵,其中列不再具有意义,而只是大纲中的一个级别。一般方法是删除一个 NULL 单元格,然后在下一行中将其相关 "children" 向左移动。

手动过程为:

  1. 删除 D5 并向左移动 Class
  2. 删除 E6 并向左移动 Order
  3. 重复广告令人作呕。

de-normalized 矩阵如下所示:

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

有一处皱纹。在某些情况下 item(暗示但未显示)未映射到 genus。相反,item 被映射到更广泛的术语,例如 family。第 15 行是一个示例,其中 family 是终端节点; genus 而不是 用来定义这个 item.

如何创建 Excel 公式或脚本:

  1. 删除空位置
  2. 在删除 NULL 位置的行上,向左移动术语
  3. 在与父单元格相关的下一行中,将术语向左移动?

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

这是我基于公式的解决方案的示例输出:

有 2 个辅助列(MN)。

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

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

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

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

O2 中的公式只是将项目放在右列中,用它填充整个范围:

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

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

编辑:

我想我在我的解决方案中发现了一个错误,N2 中的公式应该是:

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

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