我的理解是您可以使用索引定义范围。例如,我可以将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”的工作表除外。
答案 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))
希望这有帮助!