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

时间:2016-07-13 00:19:22

标签: excel error-handling excel-formula excel-indirect

我正在尝试使用 INDIRECT 创建对单独工作表的引用。我也想检查这个是否有错误,所以我使用 ISERROR 作为序言。

  • H1 是日期值,格式为" nn m.d"。在这种情况下,42574返回星期六7.23
  • '周六7.23' .D2 等于 100

让我们说一个名为"星期六7.23"的标签,我想访问单元格D2。使用 INDIRECT 并将格式化的日期转换为文本,我创建了这个公式:

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

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

='Sat 7.23'.D2

当标签存在时,此功能完美(它返回 100 )。但是......如果标签不存在怎么办? INDIRECT 会返回 #REF!,这是预料之中的。所以,我在它前面抛出一个 ISERROR

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

这不会返回任何内容(或者我猜是 FALSE ),即使 INDIRECT 正在生成 #REF!错误,因此应该 TRUE 即可。不应该吗?

更进一步:

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

在这种情况下, ISERROR 始终为true,因此 IF 总是会进入"其他"声明。由于引用无效,整个 IF 语句将返回 #REF!

3 个答案:

答案 0 :(得分:2)

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

let notesData = UserDefaults.standard.data(forKey: "notes")! // NSData
let notes = NSKeyedUnarchiver.unarchiveObject(with: notesData)

当复制到上面的一个单元格(H0上的=IFERROR(INDIRECT("'"&TEXT(H1,"ddd m.d")&"'!D2"), 0) 作为单元格地址)时,这将返回零。

答案 1 :(得分:0)

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

  1. 将没有引号的日期值为“ddd m.dd”的单元格H1的自定义格式更改。我看到你使用了“nn m.d”,它对我不起作用。

  2. 现在,在单元格I1(与H1相邻)中,让我们尝试使用下面的公式从名为“Sat 7.23”的工作表中提取D2的值:

    = IF(ISERROR(间接(“'”& TEXT(H1,“ddd md”)&“'!D2”)),“工作表不存在,请在此处输入相应的短信”,间接(“''& TEXT(H1,”ddd md“)&”'!D2“))

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

    = IF(ISERROR(间接(“'”& TEXT(H2,“ddd md”)&“'!D2”)),“工作表不存在,请在此处输入相应的短信”,间接(“''& TEXT(H2,”ddd md“)&”'!D2“))

  4. 这是完整工作表中的样子:
    Excel-INDIRECT Formula Usage

答案 2 :(得分:0)

我通过产生错误解决了类似的问题

=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

如果希望字符串与&''一起使用