我正在尝试使用 INDIRECT 创建对单独工作表的引用。我也想检查这个是否有错误,所以我使用 ISERROR 作为序言。
让我们说一个名为"星期六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!
答案 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)
下面提出的一些修正可以帮助您了解问题:
将没有引号的日期值为“ddd m.dd”的单元格H1的自定义格式更改。我看到你使用了“nn m.d”,它对我不起作用。
现在,在单元格I1(与H1相邻)中,让我们尝试使用下面的公式从名为“Sat 7.23”的工作表中提取D2的值:
= IF(ISERROR(间接(“'”& TEXT(H1,“ddd md”)&“'!D2”)),“工作表不存在,请在此处输入相应的短信”,间接(“''& TEXT(H1,”ddd md“)&”'!D2“))
要进行否定检查,我建议在H2中添加另一个日期“Sun 7.24”,并在I2中使用相同的公式,并参考H2中的日期:
= IF(ISERROR(间接(“'”& TEXT(H2,“ddd md”)&“'!D2”)),“工作表不存在,请在此处输入相应的短信”,间接(“''& TEXT(H2,”ddd md“)&”'!D2“))
这是完整工作表中的样子:
答案 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
如果希望字符串与&''一起使用