我需要从Excel公式返回一个空单元格,但Excel似乎将空字符串或空单元格引用与真正的空单元格区别对待。所以本质上我需要

=IF(some_condition,EMPTY(),some_value)

我试着去做一些事情

=IF(some_condition,"",some_value)

and

=IF(some_condition,,some_value)

假设B1是空单元格

=IF(some_condition,B1,some_value)

但这些似乎都不是真正的空单元格,我猜是因为它们是公式的结果。是否有办法填充一个细胞当且仅当满足某些条件,否则保持细胞真正空?

编辑:按照建议,我尝试返回NA(),但对于我的目的,这也不工作。有办法用VB来做这个吗?

编辑:我正在构建一个工作表,它从其他工作表中拉入数据,这些工作表被格式化为将数据导入数据库的应用程序的非常特定的需求。我没有权限更改此应用程序的实现,如果值为“”而不是实际为空,则会失败。


当前回答

是的,这是可能的。

如果满足条件,可以让公式返回true - blank。通过了ISBLANK公式的检验。唯一不方便的是,当条件满足时,公式将消失,您将不得不重新输入它。您可以设计一个公式,使其能够将结果返回给相邻的单元格,从而避免自毁。是的,这也是可能的。

你所需要的是设置一个命名范围,比如GetTrueBlank,然后你就可以像你的问题一样使用下面的模式:

=IF(A1 = "Hello world", GetTrueBlank, A1)

步骤1。把这段代码放到VBA的Module中。

Function Delete_UDF(rng)
    ThisWorkbook.Application.Volatile
    rng.Value = ""
End Function

步骤2。在Sheet1的A1单元格中,使用以下公式添加命名范围GetTrueBlank:

=EVALUATE("Delete_UDF("&CELL("address",Sheet1!A1)&")")

就是这样。没有进一步的步骤了。用自灭公式。在单元格B2中输入以下公式:

=IF(A2=0,GetTrueBlank,A2)

如果在A2中输入0,则B2中的上述公式将计算为trueblank。

您可以在这里下载演示文件。

在上面的示例中,将公式求值为trueblank会在空单元格中得到结果。用ISBLANK公式检查单元格的结果为TRUE。这是切腹自杀。当满足条件时,公式从单元格中消失。目标达到了,尽管您可能希望公式不要消失。

您可以修改公式以在相邻单元格中返回结果,这样公式就不会自行终止。查看如何在相邻单元格中获取UDF结果。

我在《the FrankensTeam》中看到了一个获得trueblank作为公式结果的例子: https://sites.google.com/site/e90e50/excel-formula-to-change-the-value-of-another-cell

其他回答

那么你必须使用VBA了。您将遍历范围内的单元格,测试条件,并删除匹配的内容。

喜欢的东西:

For Each cell in SomeRange
  If (cell.value = SomeTest) Then cell.ClearContents
Next

如果您正在使用HLOOKUP和VLOOKUP等查找函数将数据带入工作表,请将函数放在括号内,函数将返回一个空单元格而不是{0}。例如,

如果查找单元格为空,将返回零值:

    =HLOOKUP("Lookup Value",Array,ROW,FALSE)

如果查找单元格为空,则返回空单元格:

    =(HLOOKUP("Lookup Value",Array,ROW,FALSE))

我不知道这是否适用于其他功能……我还没试过。我使用Excel 2007来实现这一点。

Edit

为了让IF(A1="",,)返回为真,需要在同一个单元格中用&分隔两次查找。解决这个问题的简单方法是使第二个查找单元格位于行的末尾,并且始终为空。

答案是肯定的——你不能使用=IF()函数而让单元格空着。"看起来空"和"空"不一样。遗憾的是,背靠背的两个引号没有产生一个空的单元格,否则公式就会消失。

谷歌带着一个非常相似的问题来到这里,我终于找到了一个适合我需要的解决方案,它可能也会帮助其他人…

我用了这个公式:

=IFERROR(MID(Q2, FIND("{",Q2), FIND("}",Q2) - FIND("{",Q2) + 1), "")

是的,这是可能的。

如果满足条件,可以让公式返回true - blank。通过了ISBLANK公式的检验。唯一不方便的是,当条件满足时,公式将消失,您将不得不重新输入它。您可以设计一个公式,使其能够将结果返回给相邻的单元格,从而避免自毁。是的,这也是可能的。

你所需要的是设置一个命名范围,比如GetTrueBlank,然后你就可以像你的问题一样使用下面的模式:

=IF(A1 = "Hello world", GetTrueBlank, A1)

步骤1。把这段代码放到VBA的Module中。

Function Delete_UDF(rng)
    ThisWorkbook.Application.Volatile
    rng.Value = ""
End Function

步骤2。在Sheet1的A1单元格中,使用以下公式添加命名范围GetTrueBlank:

=EVALUATE("Delete_UDF("&CELL("address",Sheet1!A1)&")")

就是这样。没有进一步的步骤了。用自灭公式。在单元格B2中输入以下公式:

=IF(A2=0,GetTrueBlank,A2)

如果在A2中输入0,则B2中的上述公式将计算为trueblank。

您可以在这里下载演示文件。

在上面的示例中,将公式求值为trueblank会在空单元格中得到结果。用ISBLANK公式检查单元格的结果为TRUE。这是切腹自杀。当满足条件时,公式从单元格中消失。目标达到了,尽管您可能希望公式不要消失。

您可以修改公式以在相邻单元格中返回结果,这样公式就不会自行终止。查看如何在相邻单元格中获取UDF结果。

我在《the FrankensTeam》中看到了一个获得trueblank作为公式结果的例子: https://sites.google.com/site/e90e50/excel-formula-to-change-the-value-of-another-cell