我正在尝试使用INDIRECT创建对单独工作表的引用。我也想检查它是否有错误,因此我通过使用ISERROR作为开头。

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


  • 假设有一个名为“Sat 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")
    

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

    更进一步:
    =IF(ISERROR(INDIRECT("'" & TEXT(H1, "nn m.d") & "'.D2")),0,INDIRECT("'" & TEXT(H1, "nn m.d") & "'.D2"))
    

    在这种情况下,ISERROR始终为true,因此该IF始终转到其“else”语句。由于引用无效,因此整个IF语句将返回 #REF !!

    最佳答案

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

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

    复制到上方一个单元格(H0上的#REF!作为单元格地址)时,该函数将返回零。

    关于excel - ISERROR似乎忽略了#REF!由INDIRECT产生,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38340783/

    10-12 18:05