在excel工作簿中,我引用了另一个选项卡中的已定义名称(以获取相关数据验证)。直接访问定义的名称有效,但通过INDIRECT
访问它不起作用。
=INDEX(DefinedName,1)
返回范围的第一个值
=INDEX(INDIRECT("DefinedName"),1)
返回#REF!
我也试过
=INDEX(INDIRECT("SheetName!DefinedName"),1)
,但它也会返回#REF!
可以下载示例文件here。
答案 0 :(得分:3)
答案 1 :(得分:1)
不是一个答案,但它可能与您的命名范围返回数组而不是单元格引用(在本例中为{"VALL";"GENADMIN";"HOSP";"CELLAR"}
)这一事实有关。
您可以通过删除命名范围并将其替换为实际公式,然后 F9 '来复制错误:
=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"}
不是专家,但这是我最好的解决方案。
答案 2 :(得分:0)
这绝对有效。也许他们在2012年不相容,但他们确实在2018年工作。我想如果使用得当,它也会在2012年起作用。
INDIRECT函数尝试将TEXT转换为范围引用。该TEXT必须是有效的参考文献
命名范围已经是范围参考。无需从参考中获取参考。这就是OP示例在不使用INDIRECT的情况下工作的原因。
更可能的实现是,如果您从OP获得值“DefinedName”,或者单元格中的任何命名范围。然后将INDIRECT指向那个找到普通文本的单元格。然后它将该文本转换为范围引用。
您甚至可以使用INDIRECT中的公式来修改引用。一种常见的方法可能是在单元格中使用Sheet名称,然后使用INDIRECT从各种工作表中提取数据。当您想要复制和粘贴公式并使工作表(或单元格)引用动态调整为新目标时,这非常有用。
<强>设置强>
从一个空白工作簿开始,该工作簿应包含三个空白工作表(Sheet1,Sheet2和Sheet3)如果没有,请转到该点。然后输入以下基础知识: 第1页
单元格A1,输入“范围参考”
单元格A2,输入“SUM from Sheet”
单元格B1输入“Sheet2!A1:A4”(注意没有“=”此文本是范围参考。)
单元格C1,输入“THIRD_SHEET”(此文本相当于我们将在一秒钟内创建的命名范围。)
然后在Sheet2中,
单元格A1,输入1
单元格A2,输入2
Cell 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(” 表 “&安培;柱()))及”!A1:A4 “))”
现在将其复制到单元格C2。
结果
嗯,是一样的。来自单元格A1:A4的SUM分别从表格2和3返回。但是,这次没有使用列标题,并且使用字符串连接“&amp;”在INDIRECT调用本身中组装范围引用。运算符和COLUMN号。
命名范围可以以相同的方式使用。重要的是要理解,INDIRECT括号内的任何内容都需要首先解析为vaild TEXT范围引用。
我希望有所帮助!