ISERROR似乎忽略了#REF! 由INDIRECT生成
我正尝试使用INDIRECT创build对单独工作表的引用。 我也想检查这个错误,所以我通过使用ISERROR前言。
- H1是date值,格式为“nn md”。 在这种情况下,42574返回星期六7.23
- 'Sat 7.23'.D2等于100
假设有一个名为“Sat 7.23”的标签,我想访问单元格D2。 使用INDIRECT并将格式化的date转换为文本,我创build这个公式:
=INDIRECT("'" & TEXT(H1, "nn md") & "'.D2")
换句话说, INDIRECT告诉我做以下参考:
='Sat 7.23'.D2
当标签存在时,这个function完美(返回100 )。 但是…如果选项卡不存在呢? 间接回报#REF! ,这是可以预料的。 所以,我把一个ISERROR放在它的前面:
=ISERROR(INDIRECT("'" & TEXT(H1, "nn md") & "'.D2")
这不会返回任何(或者我猜FALSE ),即使INDIRECT正在生成一个#REF! 错误,因此应该是TRUE 。 不是吗?
进一步:
=IF(ISERROR(INDIRECT("'" & TEXT(H1, "nn md") & "'.D2")),0,INDIRECT("'" & TEXT(H1, "nn md") & "'.D2"))
在这种情况下, ISERROR永远是真的,所以这个IF总是去到它的“else”语句。 由于引用无效,整个IF语句返回#REF!
我不确定哪种区域性语言使用nn来表示格式掩码中的Sun-Sat,但是在EN-US系统中使用了ddd ,并且工作表和单元格地址之间有一个感叹号。
=IFERROR(INDIRECT("'"&TEXT(H1,"ddd md")&"'!D2"), 0)
当复制到上面的一个单元( #REF!
上的#REF!
作为单元地址)时,这将返回零。
以下提出的一些修改应该可以帮助您看清问题:
-
将具有date值的单元格H1的自定义格式更改为不带引号的“ddd m.dd”。 我看到你使用了“nn md”,这对我没有任何作用。
-
现在,在单元格I1(与H1相邻)中,我们尝试使用以下公式从名为“Sat 7.23”的表中拉出D2的值:
= IF(ISERROR(INDIRECT(“'”&TEXT(H1,“ddd md”)&“'!D2”)),“sheet does not exist,your your text message here”,INDIRECT(“'” TEXT(H1,“ddd md”)&“'!D2”))
-
为了做一个负面的检查,我build议在H2中input另一个date“Sun 7.24”,并在I2中使用相同的公式,参考H2中的date:
= IF(ISERROR(INDIRECT(“'”&TEXT(H2,“ddd md”)&“'!D2”)),“sheet does not exist,you put your text message here”,INDIRECT(“'” TEXT(H2,“ddd md”)&“'!D2”))
这就是在完成的工作表中的样子: