ISERROR 似乎忽略了#REF!由间接生成
ISERROR seems to be ignoring #REF! generated by INDIRECT
我正在尝试使用 INDIRECT 创建对单独 sheet 的引用。我也想检查这个错误,所以我用 ISERROR.
作为序言
- H1 是日期值,格式为 "nn m.d"。在这种情况下,42574 returns 星期六 7.23
- 'Sat 7.23'.D2 等于 100
假设有一个名为 "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 上作为单元格地址)。
下面提出的一些修正应该可以帮助您解决问题:
将具有日期值的单元格 H1 的自定义格式更改为 "ddd m.dd",不带引号。我看到你用过 "nn m.d" 但它对我不起作用。
现在,在单元格 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"))
要进行否定检查,我建议在 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
如果您希望字符串使用 &''
我正在尝试使用 INDIRECT 创建对单独 sheet 的引用。我也想检查这个错误,所以我用 ISERROR.
作为序言- H1 是日期值,格式为 "nn m.d"。在这种情况下,42574 returns 星期六 7.23
- 'Sat 7.23'.D2 等于 100
假设有一个名为 "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 上作为单元格地址)。
下面提出的一些修正应该可以帮助您解决问题:
将具有日期值的单元格 H1 的自定义格式更改为 "ddd m.dd",不带引号。我看到你用过 "nn m.d" 但它对我不起作用。
现在,在单元格 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"))
要进行否定检查,我建议在 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
如果您希望字符串使用 &''