Index/Match Header 单元格范围的计算列公式中的结构化引用 Table
Structured Reference in an Index/Match Calculated Column Formula for Header Cell Range in a Table
我在计算列中使用了这个公式,效果很好:
=IFERROR(INDEX(Allocation_of_Funds[[#Headers],[End.Nursing]:[Unassigned14]],MATCH(TRUE,INDEX(Allocation_of_Funds[@[End.Nursing]:[Unassigned14]]>0,0),0)),"")
但是这个公式给我带来了麻烦,它代表了我在下一个计算列中想要的内容(基于上一列中的值)但是它 returns #REF!错误:
=INDEX(INDIRECT("Allocation_of_Funds[[#Headers]"&"["&[@[SOURCE 1]]&"]"):[@Unassigned14],MATCH(TRUE,INDIRECT("Allocation_of_Funds[[#Headers]"&"["&[@[SOURCE 1]]&"]"):[@Unassigned14]>0,0),0)
table设置的详细信息如下,希望对您有所帮助:
我有一个包含一系列列的 table,每列代表一种不同类型的帐户。对于每一行,这些列的任意组合都可以包含值或空白,因此我有另一组列,我想为 non-blank 列标识 table 列 headers每条记录。
SOURCE1 | SOURCE2 | SOURCE3 | ACCT1 | ACCT2 | ACCT3 | ACCT4 | ACCT5
ACCT1 | ACCT2 | ACCT4 | 500 | 300 | | 100 |
ACCT2 | ACCT3 | | | 200 | 100 | |
ACCT3 | | | | | 500 | |
| | | | | | |
ACCT3 | ACCT4 | ACCT5 | | | 200 | 300 | 50
ACCT1 | ACCT3 | ACCT4 | 123 | | 332 | 100 |
所以我需要 SOURCE2 列使用 SOURCE1 列中的值来标识我正在寻找具有值的下一个单元格的范围的开始,由此该值上方的列 header 将为 SOURCE2 行值返回。相同的公式将应用于 SOURCE3 列,使用 SOURCE2 列的值来标识下一个范围的开始。
提前感谢您的脑洞!
-林赛
我使用以下公式提取 headers 并将它们放在源编号下:
=IFERROR(INDEX($D:$H,AGGREGATE(15,6,COLUMN($D2:$H2)/ISNUMBER($D2:$H2)-COLUMN($D)+1,RIGHT(A,1)*1)),"")
我假设您的 table 的左上角在 A1 中,其中 1 是 header 行,A-C 是您的源列,D 到 H 是帐户列。上面的公式可以放在A2单元格中,根据需要向右和向下复制。
你似乎已经掌握了IFERROR和INDEX函数,所以我将解释一下AGGREGATE函数:
=AGGREGATE(15,6,COLUMN($D2:$H2)/ISNUMBER($D2:$H2)-COLUMN($D)+1,RIGHT(A,1)*1)
AGGREGATE 函数是一堆不同函数的混合体,具有忽略某些计算的能力。另一个新增功能是一些内置函数无需数组即可执行数组计算。
在这种特殊情况下,我选择了聚合函数 15,它与 SMALL 函数相同。我还告诉 aggregate 忽略使用“6”产生错误的计算。对于数组计算,我要求它用它正在处理的列号除以该列的 True 或 False 结果是一个数字:
COLUMN($D2:$H2)/ISNUMBER($D2:$H2)-COLUMN($D)+1
True 在 excel 数学中与 1 相同,False 与 0 相同。只要单元格不是数字,它就会尝试除以零,产生错误,并被聚合忽略功能。这基本上会生成一个列号列表,这些列号符合在其列中具有数字的标准。 D1 减去+1 是将确定的列号转换为您帐户下的相对列 headers.
聚合函数的下一部分是告诉 SMALL 操作需要 returned 排序顺序中的哪个数字。我使用您源代码中的最后一个字符 header 来确定要 return 的列号。对于 SOURCE1,最后一个字符是 1,所以我想要最小的列号 returned。对于 SOURCE2,第二小的数字是 returned。最后的 *1 将字符转换为数字而不是 1 作为文本。
RIGHT(A,1)*1
因此,如果您想使用最多 9 个来源,您可以。你也可以做更多的来源,但你需要修改这个公式或想出一种不同的方式来提供你想要 returned 的小列表的数量。您可以将 D2:H2 引用扩展为您的所有帐户,并调整 D1:H1 引用以涵盖您的所有帐户 header。
概念验证
我在计算列中使用了这个公式,效果很好:
=IFERROR(INDEX(Allocation_of_Funds[[#Headers],[End.Nursing]:[Unassigned14]],MATCH(TRUE,INDEX(Allocation_of_Funds[@[End.Nursing]:[Unassigned14]]>0,0),0)),"")
但是这个公式给我带来了麻烦,它代表了我在下一个计算列中想要的内容(基于上一列中的值)但是它 returns #REF!错误:
=INDEX(INDIRECT("Allocation_of_Funds[[#Headers]"&"["&[@[SOURCE 1]]&"]"):[@Unassigned14],MATCH(TRUE,INDIRECT("Allocation_of_Funds[[#Headers]"&"["&[@[SOURCE 1]]&"]"):[@Unassigned14]>0,0),0)
table设置的详细信息如下,希望对您有所帮助:
我有一个包含一系列列的 table,每列代表一种不同类型的帐户。对于每一行,这些列的任意组合都可以包含值或空白,因此我有另一组列,我想为 non-blank 列标识 table 列 headers每条记录。
SOURCE1 | SOURCE2 | SOURCE3 | ACCT1 | ACCT2 | ACCT3 | ACCT4 | ACCT5
ACCT1 | ACCT2 | ACCT4 | 500 | 300 | | 100 |
ACCT2 | ACCT3 | | | 200 | 100 | |
ACCT3 | | | | | 500 | |
| | | | | | |
ACCT3 | ACCT4 | ACCT5 | | | 200 | 300 | 50
ACCT1 | ACCT3 | ACCT4 | 123 | | 332 | 100 |
所以我需要 SOURCE2 列使用 SOURCE1 列中的值来标识我正在寻找具有值的下一个单元格的范围的开始,由此该值上方的列 header 将为 SOURCE2 行值返回。相同的公式将应用于 SOURCE3 列,使用 SOURCE2 列的值来标识下一个范围的开始。
提前感谢您的脑洞!
-林赛
我使用以下公式提取 headers 并将它们放在源编号下:
=IFERROR(INDEX($D:$H,AGGREGATE(15,6,COLUMN($D2:$H2)/ISNUMBER($D2:$H2)-COLUMN($D)+1,RIGHT(A,1)*1)),"")
我假设您的 table 的左上角在 A1 中,其中 1 是 header 行,A-C 是您的源列,D 到 H 是帐户列。上面的公式可以放在A2单元格中,根据需要向右和向下复制。
你似乎已经掌握了IFERROR和INDEX函数,所以我将解释一下AGGREGATE函数:
=AGGREGATE(15,6,COLUMN($D2:$H2)/ISNUMBER($D2:$H2)-COLUMN($D)+1,RIGHT(A,1)*1)
AGGREGATE 函数是一堆不同函数的混合体,具有忽略某些计算的能力。另一个新增功能是一些内置函数无需数组即可执行数组计算。
在这种特殊情况下,我选择了聚合函数 15,它与 SMALL 函数相同。我还告诉 aggregate 忽略使用“6”产生错误的计算。对于数组计算,我要求它用它正在处理的列号除以该列的 True 或 False 结果是一个数字:
COLUMN($D2:$H2)/ISNUMBER($D2:$H2)-COLUMN($D)+1
True 在 excel 数学中与 1 相同,False 与 0 相同。只要单元格不是数字,它就会尝试除以零,产生错误,并被聚合忽略功能。这基本上会生成一个列号列表,这些列号符合在其列中具有数字的标准。 D1 减去+1 是将确定的列号转换为您帐户下的相对列 headers.
聚合函数的下一部分是告诉 SMALL 操作需要 returned 排序顺序中的哪个数字。我使用您源代码中的最后一个字符 header 来确定要 return 的列号。对于 SOURCE1,最后一个字符是 1,所以我想要最小的列号 returned。对于 SOURCE2,第二小的数字是 returned。最后的 *1 将字符转换为数字而不是 1 作为文本。
RIGHT(A,1)*1
因此,如果您想使用最多 9 个来源,您可以。你也可以做更多的来源,但你需要修改这个公式或想出一种不同的方式来提供你想要 returned 的小列表的数量。您可以将 D2:H2 引用扩展为您的所有帐户,并调整 D1:H1 引用以涵盖您的所有帐户 header。
概念验证