在 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
.
定义
列 subdivision
、subclass
、superorder
、suborder
和 family
不用于定义该特定属。相反,第 14 行的 genus
由 subdivision
.
定义
使用符号,归一化矩阵如下所示:
目标是创建一个 de-normalized 矩阵 - 重塑矩阵,其中列不再具有意义,而只是大纲中的一个级别。一般方法是删除一个 NULL 单元格,然后在下一行中将其相关 "children" 向左移动。
手动过程为:
- 删除 D5 并向左移动
Class
。
- 删除 E6 并向左移动
Order
。
- 重复广告令人作呕。
de-normalized 矩阵如下所示:
幸运的是,前三列中的符号永远不会为 NULL(C - 常量)- 我们可以引用它们,但不需要移动它们。但是符号在所有其他列中的位置是可变的(V - 可变),具体取决于哪些空值已被删除。
有一处皱纹。在某些情况下 item
(暗示但未显示)未映射到 genus
。相反,item
被映射到更广泛的术语,例如 family
。第 15 行是一个示例,其中 family
是终端节点; genus
是 而不是 用来定义这个 item
.
如何创建 Excel 公式或脚本:
- 删除空位置
- 在删除 NULL 位置的行上,向左移动术语
- 在与父单元格相关的下一行中,将术语向左移动?
如果使用名称(division
、subdivision
、class
等)比使用符号更容易,那没关系。 Google 电子表格提供了通用术语和特定术语。
这是我基于公式的解决方案的示例输出:
有 2 个辅助列(M
、N
)。
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
).
运行 Office Professional Plus 2013 Windows 7.
有一个如下图所示的矩阵:
在此 Google spreadsheet 中找到完整的矩阵数据。有两个选项卡 - 通用术语和特定术语。
矩阵用于分类items
——比如特定的植物。已将 items
分配给此矩阵,但未显示以降低复杂性。
矩阵是归一化矩阵,这意味着列是固定的 - 矩阵中有适合所有可能值的位置。但在许多情况下,列没有值(NULL 值)。例如,第 8 行的属由 kingdom : subkingdom : division : class : order : family : genus
.
列 subdivision
、subclass
、superorder
、suborder
和 family
不用于定义该特定属。相反,第 14 行的 genus
由 subdivision
.
使用符号,归一化矩阵如下所示:
目标是创建一个 de-normalized 矩阵 - 重塑矩阵,其中列不再具有意义,而只是大纲中的一个级别。一般方法是删除一个 NULL 单元格,然后在下一行中将其相关 "children" 向左移动。
手动过程为:
- 删除 D5 并向左移动
Class
。 - 删除 E6 并向左移动
Order
。 - 重复广告令人作呕。
de-normalized 矩阵如下所示:
幸运的是,前三列中的符号永远不会为 NULL(C - 常量)- 我们可以引用它们,但不需要移动它们。但是符号在所有其他列中的位置是可变的(V - 可变),具体取决于哪些空值已被删除。
有一处皱纹。在某些情况下 item
(暗示但未显示)未映射到 genus
。相反,item
被映射到更广泛的术语,例如 family
。第 15 行是一个示例,其中 family
是终端节点; genus
是 而不是 用来定义这个 item
.
如何创建 Excel 公式或脚本:
- 删除空位置
- 在删除 NULL 位置的行上,向左移动术语
- 在与父单元格相关的下一行中,将术语向左移动?
如果使用名称(division
、subdivision
、class
等)比使用符号更容易,那没关系。 Google 电子表格提供了通用术语和特定术语。
这是我基于公式的解决方案的示例输出:
有 2 个辅助列(M
、N
)。
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
).