4

在 Excel 工作簿中,我从另一个选项卡引用定义的名称(以获取相关数据验证)。直接访问定义的名称是有效的,但通过它访问INDIRECT却不行。

=INDEX(DefinedName,1)返回范围的第一个值

=INDEX(INDIRECT("DefinedName"),1)返回#REF!

我也试过

=INDEX(INDIRECT("SheetName!DefinedName"),1),但它也返回#REF!

示例文件可以在这里下载。

4

3 回答 3

4

托马斯,

我以前没有遇到过这个。

它 appeasINDIRECT和动态范围名称是不兼容的。迪克斯博客有一个有用的参考资料

于 2012-10-18T22:11:33.853 回答
2

不是一个完整的答案,但它可能与您的命名范围返回一个数组而不是单元格引用(在这种情况下{"VALL";"GENADMIN";"HOSP";"CELLAR"})这一事实有关。

您可以通过删除命名范围并将其替换为其实际公式来复制错误,然后F9'ing 公式:

=INDIRECT(OFFSET(Defaults!$C$1,1,0,COUNTA(Defaults!$C:$C)-1))
=INDIRECT({"VALL";"GENADMIN";"HOSP";"CELLAR"})

由于 Excel 期望对工作表范围进行某种引用,因此它在这里失败,因为它无法将数组解析为任何特定的东西(再次按 F9 产生={#REF!;#REF!;#REF!;#REF!})。

INDEX公式有效,因为它可以处理数组引用:

=INDEX(OFFSET(Defaults!$C$1,1,0,COUNTA(Defaults!$C:$C)-1),1)
=INDEX({"VALL";"GENADMIN";"HOSP";"CELLAR"},1)
={"VALL"}

不是专家,但这是我最擅长的。

于 2012-10-18T07:06:56.437 回答
0

这绝对会奏效。也许它们在 2012 年不兼容,但它们肯定在 2018 年有效。我想如果使用得当,它在 2012 年也会有效。
INDIRECT 函数尝试将 TEXT 转换为范围引用。该 TEXT 必须是有效的参考。
命名范围已经是范围引用。无需从引用中获取引用。这就是为什么 OP 示例在不使用 INDIRECT 的情况下工作的原因。如果您有来自 OP 的值“DefinedName”或单元格中的任何命名范围,则更有可能实现。然后将 INDIRECT 指向找到纯 ol' 文本的那个单元格。然后它将该文本转换为范围引用。

您甚至可以使用 INDIRECT 中的公式来修改引用。一种常见的方法可能是在单元格中使用工作表名称,然后使用 INDIRECT 从各种工作表中提取数据。当您想要复制和粘贴公式并使工作表(或单元格)引用动态调整到新目标时,这主要有用。

设置

从一个应该包含三个空白工作表(Sheet1、Sheet2 和 Sheet3)的空白工作簿开始。如果没有,请执行此操作。然后输入以下基本信息: 表 1

单元格 A1,输入“范围参考”

单元格 A2,输入“SUM from Sheet”

单元格 B1 输入“Sheet2!A1:A4”(注意没有“=”此文本是范围引用。)

单元格 C1,输入“THIRD_SHEET”(此文本相当于我们稍后将创建的命名范围。)

然后在Sheet2中,

单元格 A1,输入 1

单元格 A2,输入 2

单元格 A3,输入 3

单元格 A4,输入 4

在 Sheet3 中

单元格 A1-A4 分别输入 100 到 400。

然后创建一个名为“THIRD_SHEET”的命名范围,它引用 Sheet3 上的单元格 A1-A4。

尝试 在 Sheet1:单元格 B2 中,输入公式:“=SUM(INDIRECT(B1))”

将该公式复制到单元格 C2。

结果:

INDIRECT 使用列标题中的文本来指向有效的范围引用。这只是说明。您不太可能混合使用命名范围和文本范围,并且写出“Sheet1!A1:A4”不是很干净,但您可以使用任何标准公式来获得文本参考。

尝试
更改 B2 中的公式:"=SUM(INDIRECT("Sheet"&COLUMN()))&"!A1:A4"))"

现在将其复制到单元格 C2。

结果

嗯,都是一样的。单元格 A1:A4 的 SUM 分别从表 2 和表 3 返回。但是,这一次没有使用列标题,并且范围引用正在使用字符串连接“&”运算符和 COLUMN 编号在 INDIRECT 调用本身中组装。

命名范围可以以相同的方式使用。重要的是要理解 INDIRECT 括号内的任何内容都需要首先解析为有效的 TEXT 范围引用。

我希望这会有所帮助!

于 2018-04-13T18:37:09.817 回答