是否可以在这样的公式中放置命名范围?
=ISNUMBER(MATCH(D42,someworksheet!A:A,0))
具体说在哪里A:A
?
答案1
您可以使用该INDIRECT()
函数来执行此操作。
它非常简单:您只需构建一个与所需地址/引用的文字字符串匹配的字符串即可。此字符串的构建方式与您构建其他字符串的方式完全相同,这意味着您也可以使用收集各部分的所有方法。
因此,这个概念就是将INDIRECT()
函数放在函数中“D42”的后面MATCH()
。
在内部使用命名范围时,INDIRECT()
考虑返回的内容非常重要,因为这决定了如何在函数中引用命名范围。广义上讲,如果命名范围“引用”文字文本(就像您的A:A
可能一样),那么您按原样输入命名范围,不要用双引号括起来:
=INDIRECT(SomeName)
在这种情况下,SomeName
“指的是” ="A:A"
。
如果您使用双引号(每个人都告诉您命名范围必须在其中),INDIRECT()
当命名范围“引用”文字文本时,您将收到 #REF! 错误。不好。
如果命名范围以可行地址形式引用可行地址,则必须在函数内使用双引号INDIRECT()
。例如,如果SomeOtherName
“引用到” someworksheet!A:A
(“引用到”值中没有引号 - 它是一个可行地址,您可以将其直接复制并粘贴到公式中,并且它会按照您找到的方式工作),那么您将使用它:
=INDIRECT("SomeOtherName")
因此,您可以使用任一方法来定义命名范围。但是,如果命名范围“引用”一个可行的地址,Excel 将在您创建和定义命名范围时将您激活的工作表的工作表名称添加到其中。如果您希望命名范围在其提供的内容中包含该工作表,INDIRECT()
或者如果您不希望包含该工作表,但愿意在INDIRECT()
对其进行评估之前使用字符串技术从中删除该工作表名称,那么这一切都很好。
如果您使用文字字符串("A:A"
- 注意双引号使其成为文字字符串,而不是可行的地址),那么您将使用以下公式:(使用上面的名称)
=ISNUMBER(MATCH(D42, INDIRECT("someworksheet!"&SomeName), 0)))
INDIRECT()
将双引号工作表名称和“!”与来自 INDIRECT() 的文字字符串连接起来SomeName ("A:A") to get "someworksheet!A:A". What's inside the doublequotes would be a valid address/reference, so
将返回所需的结果。
如果您同意命名范围返回工作表名称以及“A:A”,那么您可以使用以下命令:
=ISNUMBER(MATCH(D42, INDIRECT("SomeOtherName"), 0)))
命名范围周围的双引号非常重要。在这种情况下,它将获得可行的地址,并且不会在一步之后构建任何字符串,并返回它给出的值,就像另一个示例一样。
如果您想要的正是问题中提到的内容,请使用第一个。
有很多理由选择一种方法而不是另一种。您的确切用途/需求将决定您选择哪种方法。两者都没有任何理论上的偏好。
一般来说,任何时候你需要建立一个地址并将其用作一个真正的地址,而不是一个字符串,它INDIRECT()
都是你的好帮手。在公式中逐字指定地址和像你使用 一样逐步指定地址之间存在一些步骤INDIRECT()
。例如,OFFSET()
可以建立一个地址,但它是直接从可以以各种方式指定的部分开始的,但它们都不能是像“someothersheet”这样的文本——所以它介于直接写地址和完全用文本创建地址之间。
它有很多用途。上面只是提到了所有用途。它非常有用,你应该在帮助网站上查找并了解它。
过去,对于几乎所有事情,以及目前对于可能使用它的电子表格,比如说,几十万次,或者其余计算负担同样巨大的电子表格,它确实有一个缺点。它是一个,volatile function
并且每次 Excel 计算时,都会重新计算包含它的任何单元格。不仅仅是当 Excel 认为需要这样做,因为影响它的某些东西发生了变化。凭借当今的计算机和内存水平,这不再是任何问题,除非如上所述,有人拥有巨大的计算负载,或者会使用它本身成为巨大的负载。而巨大的意思是,比如说,100,000 或更多行和一些合理数量的列。如果你的电子表格计算缓慢,需要考虑这一点。此外,现代 Excel 具有该LET()
功能,如果你使用计算任何给定单元格中相同地址的次数超过一次,LET()
将允许你将计算次数减少到仅一次,而不是多次。所以它每天都变得越来越有用!