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

时间:2009-07-13 14:00:14

标签: excel excel-formula

我需要从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做到这一点?

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

20 个答案:

答案 0 :(得分:69)

Excel无法做到这一点。

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

我所看到的一种做法是使用NA()和ISNA(),但这可能会或可能不会真正解决您的问题,因为NA()被其他函数处理的方式存在很大差异(SUM (NA())是#N / A,而如果A1为空则SUM(A1)为0。

答案 1 :(得分:46)

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

类似的东西:

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

答案 2 :(得分:28)

是的,有可能。

如果满足条件,可以使湮灭公式评估为trueblank。它通过了ISBLANK公式的测试。

设置3个步骤后,您可以在答案中使用命名范围GetTrueBlank

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

第1步。将此代码放入VBA模块中。

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

第2步。Sheet1A1个单元格中,使用以下公式添加命名范围 GetTrueBlank

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

enter image description here

第3步。使用自我湮灭公式。放入单元格,比如B2,使用以下公式:

=IF(A2=0,GetTrueBlank,A2)

enter image description here

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

您可以 download a demonstration file here

在上面的示例中,将公式计算为trueblank会导致空单元格。使用ISBLANK公式检查结果肯定为TRUE。这是hara-kiri喜欢的配方。当满足条件时,公式从单元格中消失。达到了目标,尽管您可能希望公式不会消失。

您可以修改公式以在相邻单元格中返回结果,以便公式不会自行终止。 See how to get UDF result in adjacent cell

我在这里看到了FrankensTeam揭示的一个真实空白作为公式结果的例子: https://sites.google.com/site/e90e50/excel-formula-to-change-the-value-of-another-cell

答案 3 :(得分:18)

也许这是作弊,但它确实有效!

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

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

当发生无效的单元格值时,这确实给出了没有点的所需图形。当然,这会使所有具有无效值的单元格都显示为#N/A,而这很麻烦。

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

答案 4 :(得分:10)

这就是我为我使用的数据集所做的。这似乎是错综复杂和愚蠢的,但它是学习如何使用上述VB解决方案的唯一选择。

  1. 我对所有数据进行了“复制”,并将数据粘贴为“值”。
  2. 然后我突出显示粘贴的数据并用一些字母“替换”( Ctrl - H )空单元格,我选择q因为它我的数据表上没有任何内容。
  3. 最后,我做了另一个“替换”,并取而代之的是q
  4. 这个三步过程将所有“空”细胞变成“空白”细胞“。我尝试通过简单地用空白细胞替换空白细胞来合并步骤2和3,但这不起作用 - 我必须用某种实际文本替换空白单元格,然后用空白单元格替换该文本。

答案 5 :(得分:8)

如果目标是当一个单元实际上具有零值时能够将单元格显示为空,那么而不是使用导致空单元格或空单元格的公式(因为没有empty()函数)相反,

  • 您想要一个空白单元格,返回0代替"",然后返回

  • 设置像这样的单元格的数字格式,在那里你必须得到你想要的正数和负数(前两个用分号分隔的项目)。在我的情况下,我的数字是0,1,2 ......我希望0显示为空。 (我从未弄清楚文本参数的用途,但似乎是必需的。)

    0;0;"";"text"@
    

答案 6 :(得分:6)

尝试使用LEN评估单元格。如果它包含公式LEN,则会返回0。如果它包含文本,则返回大于0

答案 7 :(得分:6)

COUNTBLANK(B1)>0声明中使用ISBLANK(B1)代替IF

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

答案 8 :(得分:6)

哇,很多人误解了这个问题。将单元格外观设置为空是很容易的。问题是,如果您需要单元格为空,Excel公式不能返回“无值”但只能返回值。返回零,空格或甚至“”是一个值。

因此,您必须返回“魔术值”,然后使用搜索和替换或使用VBA脚本将其替换为无值。虽然您可以使用空格或“”,但我的建议是使用明显的值,例如“NODATE”或“NONUMBER”或“XXXXX”,以便您可以轻松查看它出现的位置 - 很难找到“”在电子表格中。

答案 9 :(得分:6)

这么多答案会返回一个LOOKS为空的值,但实际上并不像请求的那样为空格...

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

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

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

    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错误将保持未删除

答案 10 :(得分:4)

这个答案并没有完全处理OP,但是有几次我遇到过类似的问题并且搜索了答案。

如果 ,您可以 重新创建 公式或数据(如果需要)(根据您的说明,它看起来像如果你可以),那么当你准备好运行需要空单元格实际为 的部分时,你可以选择该区域并运行以下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

这将消除当前显示""或仅包含公式的任何单元格的内容

答案 11 :(得分:2)

我使用了以下方法使我的excel看起来更干净:

当你进行任何计算时,“”会给你错误,所以你想把它当成一个数字,所以我用一个嵌套的if语句返回0而不是“”,然后如果结果为0,这个等式将返回“”

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

这样excel表看起来很干净......

答案 12 :(得分:1)

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

它使用ISBLANK函数检查IF语句中的单元格是否为空。 如果单元格中有任何内容,在此示例中为A1,即使是空格字符,则单元格不是EMPTY,也会产生计算结果。 这将使计算错误无法显示,直到您有数字可供使用。

如果单元格为EMPTY,则计算单元格将不显示计算中的错误。如果单元格为NOT EMPTY,则将显示计算结果。 如果您的数据不好,可怕的#DIV/0

会导致错误
=IF(ISBLANK(A1)," ",STDEV(B5:B14))

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

答案 13 :(得分:1)

如果使用HLOOKUP和VLOOKUP之类的查找函数将数据放入工作表中,则将函数放在括号内,函数将返回空单元而不是{0}。例如,

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

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

如果查找单元格为空,这将返回一个空单元格:

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

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

修改

要实际获得一个IF(A1 =“”,)以回归为真,需要在同一个单元格中进行两次查找,并由&amp ;.分隔。解决这个问题的简单方法是使第二个查找位于行末的单元格,并且始终为空。

答案 14 :(得分:1)

我使用的是一个小技巧。 我使用了T(1),它返回了一个空单元格。 T是excel中的一个函数,如果它是一个字符串,则返回其参数,否则返回一个空单元格。因此,您可以做的是:

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

答案 15 :(得分:0)

答案是肯定的 - 你不能使用= IF()函数并将单元格留空。 “看起来空”与空不一样。令人遗憾的是,背靠背的两个引号不会在不擦除公式的情况下产生空单元格。

答案 16 :(得分:0)

我正在删除单引号,因此电话号码列(例如+ 1-800-123-4567)不会导致计算并产生负数。 我试图通过黑客手段将它们删除在空单元格上,加引号,然后再打这个问题(F列)。只需在源单元格上调用文本就可以了!

a

答案 17 :(得分:0)

这可以在 Excel 中完成,无需使用将#N/A 设置为间隙的新图表功能。但它很繁琐。假设您想在 XY 图表上画线。然后:
第 1 行:第 1 点
第 2 行:第 2 点
第 3 行:硬空
第 4 行:第 2 点
第 5 行:第 3 点
第 6 行:硬空
第 7 行:第 3 点
第 8 行:第 4 点
第 9 行:硬空

结果是很多单独的行。点的公式可以控制是否被#N/A 省略。通常是将 INDEX() 点到另一个范围的公式。

答案 18 :(得分:0)

♣ 已解决(有点:)♣

继我对主要 Q 的评论之后 - 请参阅下面谷歌表格中场景 1 和 2 下的列表应用。不健壮,但如果函数输出是主要兴趣(并且能够在不同的条件集下显示完全空白的单元格),则“可以完成工作”。

屏幕截图:

Scenario 1: non-empty function result

Scenario 2: EMPTY function result

注意:永远不要说永远! ☻

链接到 Google 表格示例

Enjoy

答案 19 :(得分:-1)

Google给我带来了一个非常类似的问题,我终于想出了一个符合我需求的解决方案,它也可以帮助别人...

我使用了这个公式:

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