用INDEX公式定义一个子范围的问题

我的理解是,你可以使用索引来定义一个范围。 例如我可以设置MyList的定义名称

=index(A:A,3,1):index(A:A,5,1) 

这将相当于说A3:A5。 然后我可以转身使用索引(MyList,1,1),我会看到A3的内容。 所有这一切对我有用。

所以我试图定义一个表名的范围。 我使用定义的名称sheetnames:

  =TRANSPOSE(GET.WORKBOOK(1,Structural!$J$3)&T(NOW())) 

(我用转置来获取列表垂直)

当我使用:

  =INDEX(Sheetnames,3,1) =INDEX(Sheetnames,6,1) 

我在工作簿中分别得到我的第3张或第6张的名字。 这部分工作。 但是,当我尝试定义一个范围像我为MyList使用以下我得到#value

  =INDEX(INDEX(Sheetnames,3,1):INDEX(Sheetnames,6,1),1,1) 

题:

为什么它不工作?

作为获得第一个sheetname的testing,我也尝试过:

  =OFFSET(Sheetnames,1,1,1,1) 

这也给了同样的错误。

我最终要做的是通过除名为“索引”和“主”的表格之外的所有表格名称的数据validation生成一个下拉列表。

根据Excel的INDEX帮助文件…

参考表格

描述

返回特定行和列相交处单元格的引用。 如果引用由不相邻的select组成,则可以select要查找的select。

句法

INDEX(引用,row_num,[column_num],[area_num])

INDEX函数语法具有以下参数。

需要参考。 对一个或多个单元格区域的引用

等等…

因此,为了返回一个引用,你需要引用一系列的单元格。 然而, SheetNames不涉及一系列单元格。 它指的是GET.WORKBOOK ,它返回一个值的数组。 在这种情况下,它返回一个表格名称数组。

所以用下面的公式…

 =INDEX(INDEX(Sheetnames,3,1):INDEX(Sheetnames,6,1),1,1) 

…它被评估如下(假设工作簿被称为Book1.xlsx,你有Sheet1,Sheet2,Sheet3等)…

 --> some preliminary evaluations <--- =INDEX("[Book1.xlsx]Sheet3":"[Book1.xlsx]Sheet6",1,1) =INDEX(#VALUE!,1,1) =#VALUE! 

您可以通过select包含公式的单元格,然后使用function区上的“ Evaluate Formulabutton(“公式”选项卡>“公式审计”组),逐步对公式Evaluate Formula

在这种情况下,您也可以使用ISREF函数确认INDEX不返回引用。 下面的公式应该返回FALSE

 =ISREF(INDEX(Sheetnames,3,1)) 

希望这可以帮助!