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!作为单元地址)时,这将返回零。

以下提出的一些修改应该可以帮助您看清问题:

  1. 将具有date值的单元格H1的自定义格式更改为不带引号的“ddd m.dd”。 我看到你使用了“nn md”,这对我没有任何作用。

  2. 现在,在单元格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”))

  3. 为了做一个负面的检查,我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”))

这就是在完成的工作表中的样子:
Excel-INDIRECT公式用法