索引/匹配中的结构化引用表中的报头单元格范围的计算列公式

我有一个很好的计算列中的公式:

=IFERROR(INDEX(Allocation_of_Funds[[#Headers],[End.Nursing]:[Unassigned14]],MATCH(TRUE,INDEX(Allocation_of_Funds[@[End.Nursing]:[Unassigned14]]>0,0),0)),"") 

但是这个公式给我带来了麻烦,并且代表我在下一个计算列中所要求的(基于上面的列中的值),但是它返回一个#REF! 错误:

 =INDEX(INDIRECT("Allocation_of_Funds[[#Headers]"&"["&[@[SOURCE 1]]&"]"):[@Unassigned14],MATCH(TRUE,INDIRECT("Allocation_of_Funds[[#Headers]"&"["&[@[SOURCE 1]]&"]"):[@Unassigned14]>0,0),0) 

表格设置的细节如下,以备有用:

我有一系列的列表,每列表示不同types的帐户。 对于每一行,这些列的任何组合都可以包含值或空白,所以我有另一组列,我想为每个logging的非空列标识表列标题。

 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列中的值来标识要查找下一个具有值的单元格的范围的开始位置,因此将为SOURCE2行值返回该值以上的列标题。 相同的公式将应用于SOURCE3列,使用SOURCE2列的值来标识下一个范围的开始。

预先感谢您挑选您的大脑!

-Lindsay

我使用下面的公式来拉头,并将它们放在源数字下:

 =IFERROR(INDEX($D$1:$H$1,AGGREGATE(15,6,COLUMN($D2:$H2)/ISNUMBER($D2:$H2)-COLUMN($D$1)+1,RIGHT(A$1,1)*1)),"") 

我假设你的桌子左上angular是A1,其中1是标题行,AC是你的源列,D到H是账户列。 上述公式可以放在单元格A2中,并根据需要复制到右侧和下侧。

您似乎掌握了IFERROR和INDEX函数,所以我将解释AGGREGATE函数:

 =AGGREGATE(15,6,COLUMN($D2:$H2)/ISNUMBER($D2:$H2)-COLUMN($D$1)+1,RIGHT(A$1,1)*1) 

AGGREGATE函数是一堆不同函数的混合体,可以忽略一些计算。 另一个附加function是,一些内置函数执行数组计算,而不需要数组。

在这种情况下,我select了与SMALLfunction相同的聚合函数15。 我也告诉汇总忽略使用“6”产生错误的计算。 对于数组计算,我已经要求它将它正在处理的列号除以该列的True或False结果是一个数字:

 COLUMN($D2:$H2)/ISNUMBER($D2:$H2)-COLUMN($D$1)+1 

在Excel中是正确的math是1和False是一样的0.任何时候单元格不是一个数字它将尝试除以零,产生一个错误,并被聚合函数忽略。 这基本上会生成一个列号列表,满足列中有一个数字的标准。 将D1减去+1后,将确定的列号转换为帐户标题下的相对列。

聚合函数的下一部分是告诉SMALL操作哪个数字按sorting顺序需要被返回。 我使用源标题中的最后一个字符来确定要返回的列号。 对于SOURCE1,最后一个字符是1,所以我想要返回最小的列号。 对于SOURCE2,返回第二小的数字。 最后* 1将字符转换为数字而不是1作为文本。

 RIGHT(A$1,1)*1 

Ergo,如果你想使用多达9个来源,你可以。 你也可以做更多的来源,但是你需要修改这个公式,或者提供一个不同的方式来提供你想要返回的小列表的数量。 您可以将D2:H2参考展开为所有帐户,并调整D1:H1参考以涵盖您的所有帐户标题。

概念validation

在这里输入图像说明