ISERROR 似乎忽略了#REF!由间接生成

ISERROR seems to be ignoring #REF! generated by INDIRECT

我正在尝试使用 INDIRECT 创建对单独 sheet 的引用。我也想检查这个错误,所以我用 ISERROR.

作为序言

假设有一个名为 "Sat 7.23" 的选项卡,我想访问单元格 D2。使用 INDIRECT 并将格式化日期转换为文本,我创建了这个公式:

=INDIRECT("'" & TEXT(H1, "nn m.d") & "'.D2")

换句话说,INDIRECT 告诉我做以下参考:

='Sat 7.23'.D2

,当Tab存在时,此功能完美(IT returns 100 )。但是...如果选项卡不存在怎么办? INDIRECT returns #REF!,这是意料之中的。所以,我在它前面抛出一个 ISERROR:

=ISERROR(INDIRECT("'" & TEXT(H1, "nn m.d") & "'.D2")

这 returns 什么都没有(或者我猜 FALSE),即使 INDIRECT 正在生成 #REF! 错误,因此应该是 TRUE。不应该吗?

更进一步:

=IF(ISERROR(INDIRECT("'" & TEXT(H1, "nn m.d") & "'.D2")),0,INDIRECT("'" & TEXT(H1, "nn m.d") & "'.D2"))

在这种情况下,ISERROR 始终为真,因此此 IF 始终转到它的 "else" 语句。由于引用无效,整个 IF 语句 returns #REF!

我不确定哪种区域语言使用 nn 来表示格式掩码中的星期日 - 星期六,但 ddd 用于EN-US系统,工作表和单元格地址之间有感叹号。

=IFERROR(INDIRECT("'"&TEXT(H1,"ddd m.d")&"'!D2"), 0)

这将 return 复制到上面的一个单元格时为零(#REF! 在 H0 上作为单元格地址)。

下面提出的一些修正应该可以帮助您解决问题:

  1. 将具有日期值的单元格 H1 的自定义格式更改为 "ddd m.dd",不带引号。我看到你用过 "nn m.d" 但它对我不起作用。

  2. 现在,在单元格 I1(与 H1 相邻)中,我们尝试使用以下公式从名为 'Sat 7.23' 的 sheet 中提取 D2 的值:

    =IF(ISERROR(INDIRECT("'" & TEXT(H1, "ddd m.d") & "'!D2")),"sheet doesn't exist, put your appropriate text message here",INDIRECT("'" & TEXT(H1 , "ddd m.d") & "'!D2"))

  3. 要进行否定检查,我建议在 H2 中输入另一个日期“Sun 7.24”,并在 I2 中使用相同的公式并引用 H2 中的日期:

    =IF(ISERROR(INDIRECT("'" & TEXT(H2, "ddd m.d") & "'!D2")),"sheet doesn't exist, put your appropriate text message here",INDIRECT("'" & TEXT(H2 , "ddd m.d") & "'!D2"))

这是完成作品的样子sheet:

我通过生成错误修复了类似的问题

=IFERROR(QUERY(INDIRECT("'"&I2&"'!B3:E", TRUE), "select E where B = '"&I5&"'),"-")

给出 #REF!

=IFERROR(QUERY(INDIRECT("'"&I2&"'!B3:E", TRUE), "select E where B = '"&I5&"')*1,"-")

有效 因为 REF 的乘法! 1 给出错误

如果您希望输入数字,请使用 *1

如果您希望字符串使用 &''