在Excel中从公式返回空单元格

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

=IF(some_condition,EMPTY(),some_value)

我试着去做一些事情

=IF(some_condition,"",some_value)

而且

=IF(some_condition,,some_value)

假设B1是空单元格

=IF(some_condition,B1,some_value)

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

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

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

830594 次浏览

Excel没有办法做到这一点。

Excel单元格中的公式的结果必须是数字、文本、逻辑(布尔)或错误。没有公式单元格值类型为“空”或“空白”。

我所看到的一个实践是使用NA()和ISNA(),但这可能也可能不能真正解决你的问题,因为其他函数处理NA()的方式有很大的不同(SUM(NA())是#N/ a,而SUM(A1)如果A1为空则为0)。

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

喜欢的东西:

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

尝试使用LEN计算单元格。如果它包含公式,LEN将返回0。如果它包含文本,则返回值将大于0

这就是我如何为我正在使用的数据集做的。这看起来既复杂又愚蠢,但它是学习如何使用上面提到的VB解决方案的唯一选择。

  1. 我“复制”了所有数据,并将数据粘贴为“值”。
  2. 然后我突出显示粘贴的数据,并用一些字母“替换”(Ctrl-H)空单元格,我选择了q,因为它不在我的数据表上的任何地方。
  3. 最后,我做了另一个“替换”,并将q替换为空。

这三个步骤将所有的“空”单元格变成了“空白”单元格。我尝试合并步骤2 &3通过简单地将空白单元格替换为空白单元格,但这并不管用——我必须将空白单元格替换为某种实际的文本,然后将该文本替换为空白单元格。

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

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

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

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

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

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

编辑

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

如果目标是能够在单元格值为0时将其显示为空,则不使用导致单元格为空或空的公式(因为没有empty()函数),

  • 如果你想要一个空白单元格,返回0而不是"",然后

  • 像这样设置单元格的数字格式,在这里您必须提出您想要的正数和负数(前两项由分号分隔)。在我的例子中,我拥有的数字是0、1、2……我希望0显示为空。(我从来没有弄清楚文本参数的用途,但它似乎是必需的)。

    0;0;"";"text"@
    

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

也许这是作弊,但很有效!

我还需要一个表作为图形的源,我不希望任何空白或零单元格在图形上产生一个点。的确,您需要设置图形属性,选择数据,隐藏和空单元格以“显示空单元格为间隙”(单击单选按钮)。这是第一步。

然后,在可能以不希望绘制的结果结束的单元格中,将公式放在带有NA()结果的IF语句中,例如=IF($A8>TODAY(),NA(), *formula to be plotted*)

当出现无效的单元格值时,这将给出没有点的所需图形。当然,这使得所有具有无效值的单元格都要读取#N/A,这很混乱。

要清除此错误,请选择可能包含无效值的单元格,然后选择条件格式 - new rule。选择“仅格式化包含的单元格”,在规则描述下从下拉框中选择“错误”。然后在格式下选择字体-颜色-白色(或任何你的背景颜色碰巧)。单击各种按钮来退出,你应该看到无效数据的单元格看起来是空白的(它们实际上包含#N/A,但白色背景上的白色文本看起来是空白的)。然后链接图也不显示无效值点。

到目前为止,这是我能想到的最好的。

它使用ISBLANK函数检查IF语句中的单元格是否真的为空。 如果单元格中有任何东西,在本例中是A1,甚至是一个空格字符,,那么单元格不是EMPTY,计算结果将是。 这将防止计算错误显示,直到你有数字来处理

如果单元格为EMPTY,则计算单元格将不显示计算中的错误。如果单元格为NOT EMPTY,则将显示计算结果。 如果你的数据是坏的,这将抛出一个错误,可怕的#DIV/0!< / p >

=IF(ISBLANK(A1)," ",STDEV(B5:B14))

根据需要更改单元格引用和公式。

哇,很多人误解了这个问题。使单元格为空很容易。问题是,如果您需要单元格为空,Excel公式不能返回“无值”,而只能返回一个值。返回零、空格甚至“”都是一个值。

因此,您必须返回一个“魔法值”,然后使用搜索和替换或使用VBA脚本将其替换为无值。虽然你可以使用空格或“”,但我的建议是使用一个明显的值,比如“NODATE”或“NONUMBER”或“XXXXX”,这样你就可以很容易地看到它出现在哪里——在电子表格中很难找到“”。

我使用了下面的工作使我的excel看起来更干净:

当你进行任何计算时,""会给你错误所以你想把它当作一个数字所以我使用了一个嵌套的if语句来返回0而不是""如果结果是0这个方程将返回""

=IF((IF(A5="",0,A5)+IF(B5="",0,B5)) = 0, "",(IF(A5="",0,A5)+IF(B5="",0,B5)))

这样excel表格看起来会很干净。

如此多的答案,返回一个值,看起来是空的,但实际上不是一个空的作为单元格请求…

如果您确实想要一个返回空单元格的公式。这是可能的通过VBA。这里是代码,可以做到这一点。首先编写一个公式,在您希望单元格为空的地方返回#N/ a错误。然后我的解决方案自动清除所有包含#N/A错误的单元格。当然,您可以根据自己的喜好修改代码以自动删除单元格的内容。

打开visual basic viewer (Alt + F11) 在项目资源管理器中找到感兴趣的工作簿并双击它(或右击并选择查看代码)。这将打开“视图代码”窗口。在(General)下拉菜单中选择“Workbook”,在(Declarations)下拉菜单中选择“SheetCalculate”

将以下代码(基于J.T. Grimes的回答)粘贴到Workbook_SheetCalculate函数中

    For Each cell In Sh.UsedRange.Cells
If IsError(cell.Value) Then
If (cell.Value = CVErr(xlErrNA)) Then cell.ClearContents
End If
Next

将文件保存为启用宏的工作簿

注:这个过程就像一把手术刀。它将删除任何计算为#N/A错误的单元格的全部内容,因此要注意。它们会消失,如果不重新输入它们曾经包含的公式,你就不能把它们拿回来。

NB2:很明显,当你打开文件时,你需要启用宏,否则它将无法工作,#N/A错误将保持未删除

IF语句中使用COUNTBLANK(B1)>0而不是ISBLANK(B1)

ISBLANK()不同,COUNTBLANK()""视为空并返回1。

是的,这是可能的。

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

enter image description here

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

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

将此代码放入VBA的模块中。

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

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

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

enter image description here

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

=IF(A2=0,GetTrueBlank,A2)

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

你可以在这里下载演示文件

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

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

毗邻cell .

我遇到了一个例子,得到一个trueblank作为公式结果在这里由弗兰肯steam揭示: https://sites.google.com/site/e90e50/excel-formula-to-change-the-value-of-another-cell < / p >

这个答案并没有完全解决OP,但我已经有几次遇到类似的问题,并寻找答案。

如果< em > < / em >你可以< em >创建< / em >公式或数据,如果需要的话(从你的描述中看起来好像可以),然后当你准备好运行需要空白单元格实际上是空< em > < / em >的部分时,然后你可以选择该区域并运行下面的vba宏。

Sub clearBlanks()
Dim r As Range
For Each r In Selection.Cells
If Len(r.Text) = 0 Then
r.Clear
End If
Next r
End Sub

这将清除当前显示""或只有公式的任何单元格的内容

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

我用了这个公式:

=IFERROR(MID(Q2, FIND("{",Q2), FIND("}",Q2) - FIND("{",Q2) + 1), "")
我用的是一个小hack。 我使用T(1),它返回一个空单元格。 T是excel中的一个函数,如果是字符串返回参数,否则返回空单元格。你可以这样做:

=IF(condition,T(1),value)

我去掉了单引号,这样+1-800-123-4567这样的电话号码列就不会导致计算并产生负数。 我尝试了一个黑客删除他们的空单元格,酒吧引用,然后击中这个问题也(列F)。它更容易只是在源单元格上调用文本,瞧!: < / p >

=IF(F2="'","",TEXT(F2,""))
这可以在Excel中完成,无需使用新的图表功能设置#N/A为间隔。但它很精细。假设你想在XY图上画一条线。:
第一行:点1
第二行,点2
第三行:硬空
第4行,第2点
第5行第3点
第6行:hard empty
第7行第3点
第8行第4点
第9行:硬空
等< / p >

结果是有很多独立的行。这些点的公式可以控制是否被#N/ a省略。通常将公式中的点INDEX()放入另一个范围。