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

时间:2017-08-02 17:50:32

标签: excel excel-formula

我的理解是您可以使用索引定义范围。例如,我可以将MyList的已定义名称设置为

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

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

所以我试图定义一系列工作表名称。我使用定义的名称表名作为:

 =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)

问题:

为什么不起作用?

作为获得第一张名字的测试,我也尝试过:

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

这也给出了同样的错误。

我最终要做的是通过所有工作表名称的数据验证生成一个下拉列表,但名为“Index”和“Master”的工作表除外。

1 个答案:

答案 0 :(得分:1)

根据Excel在INDEX上的帮助文件......

  

参考表格

     

描述

     

返回特定位置交叉处的单元格引用   行和列。如果引用由不相邻的选择组成,   你可以选择要查看的选择。

     

语法

     

INDEX(reference,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!

您可以通过选择包含公式的单元格并使用功能区上的Evaluate Formula按钮(公式选项卡&gt;公式审核组)单步执行公式来评估公式。

在这种情况下,您还可以使用INDEX函数确认ISREF未返回引用。以下公式应返回FALSE ...

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

希望这有帮助!