在Google表格中,如何根据另一个单元格缺乏内容,返回空白单元格或执行函数?

29

这是我到目前为止所拥有的:

=if(ISBLANK(A:A), (A:A+TIME(2, 0, 0)), "")

我希望脚本可以在A:A的时间基础上加2个小时,如果A:A中没有数据,则保持空白。

如果您有任何想法,将不胜感激。谢谢 :)


这个脚本将进入B:B,结果也需要在B:B中显示。 - Chips147
4个回答

68
如果您想要得到一个真正的“空白”值,可以使用表达式IFERROR(0/0)。这与使用""获得的空字符串不同。具有空字符串的单元格将无法使用ISBLANK()测试为true,但IFERROR(0/0)会如此。
例如:
=IF(ISBLANK(A1),IFERROR(0/0),"not blank")
这是如何工作的: IFERROR 函数需要两个参数。如果第一个参数是一个值,IFERROR 将返回该值。如果第一个参数返回一个错误,IFERROR 将返回第二个参数,但如果没有第二个参数,则返回空白。我们使用表达式 0/0 故意通过除以零来强制出现错误,并且因为没有第二个参数,IFERROR 返回空白。

53
刚刚意识到,如果省略IF函数中的一个参数,它会返回一个空值,因此您不需要使用IFERROR(0/0)技巧。例如,=IF(ISBLANK(A1),,"not blank")同样可以正常工作! - Ian Viney
1
谷歌关于IFERROR的支持文档指出:“如果第一个参数不是错误值,则返回第一个参数,否则返回第二个参数(如果存在),或者如果第二个参数不存在,则返回空白。”关于IF的文档没有这么明确,但它确实提到了:“value_if_false - [可选项-默认为空白]”。 - Ian Viney
1
IFS的文档没有提到,但如果省略值参数,则会返回空值。 - Ian Viney
1
非常有用的评论!需要注意的是,这不是 Excel 默认使用的行为。 - Zediiiii
1
即使iferrorif有更好的文档记录,但使用if感觉比强制出错更不像是hacky。 - crantok
显示剩余2条评论

1

首先,在if(condition,value_if_true,value_if_false)中,你需要交换value_if_truevalue_if_false的位置。因此第一个修正为:

=if(ISBLANK(A:A), "", (A:A+TIME(2, 0, 0)))

其次,这只会填充一行。但是我们可以假设您想要所有行,因此您可以使用数组公式进行包装:
=arrayformula(  if(ISBLANK(A:A), "", (A:A+TIME(2, 0, 0)))  )

第三,我们也可以假设row1是表头,因此您想要跳过它,所以您可以将该函数放在B2中而不是B1,并且范围需要从A:A更改为A2:A。我不认为Excel支持A2:A范围格式,但它在Google电子表格中非常有用。


最终得到了这个,然后只需将公式向下拖动即可 :) =arrayformula(if(ISBLANK(A2),"",A2+TIME(2, 0, 0))) - Chips147
你的 if 函数没有包含数组参数,因此不需要使用 arrayformula。如果 if 函数包含数组参数,则 arrayformula 会自动填充下面的行,无需复制公式。 - daniel
Google Sheets绝对支持A2:A范围格式,尽管在此发布时可能还不支持。 - Zediiiii

0
你需要在它周围添加arrayformula,并交换空字符串所在的位置。而不考虑数据,你想要的基本上是:
=arrayformula(if(ISBLANK(A:A),"",A:A+TIME(2, 0, 0)))

最终得到了这个,然后只需将公式向下拖动:) =arrayformula(if(ISBLANK(A2),"",A2+TIME(2, 0, 0))) - Chips147
1
你使用数组公式的原因是不需要拖动它,而且你也可以将其放在B1中,并稍微修改一下:=arrayformula(if(ISBLANK(A2:A),"",A2:A+TIME(2, 0, 0)))。 - Aurielle Perlmann
1
这确实使单元格为空,它在单元格中放入了一个空字符串,因此如果您在其他地方测试该单元格,则ISBLANK(A2:A)将为FALSE,而ISTEXT(A2:A)将为TRUE。如果您真的想让它为空,请使用=ARRAYFORMULA(IF(ISBLANK(A2:A),,A2:A+TIME(2,0,0))) - Fauxcuss
@Monkey47是正确的,即使它帮助OP解决了问题(或者以前是正确的但现在不再是),这也不应该是“正确”的答案。Ian Viney的答案在获取一个空单元格的解决方案方面是“正确的”。 - Cfomodz

0

我最终找到的解决方案实际上是对上述方法的轻微修改。当我所定位的单元格为空时,我希望源单元格返回一个空单元格,否则我希望它返回目标单元格的值(这是一个布尔值):

=IFERROR(IF(ISBLANK('1578'!$B14:C14), , '1578'!$B14:C14), "")

/** Breakdown
 *
 * // In my use case the target had three potential values: empty (undefined), TRUE, or FALSE
 * '1578'!$B14:C14
 *
 * // Returns true if target cell is blank
 * ISBLANK('1578'!$B14:C14)
 *
 * // If target cell is blank, return nothing, else return value from target cell
 * IF(ISBLANK('1578'!$B14:C14), , '1578'!$B14:C14)
 *
 * // Return first value if no error (accounts for undefined target cell value) else return blank cell
 * IFERROR(IF(ISBLANK('1578'!$B14:C14), , '1578'!$B14:C14), "")
 */

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接