241

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

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

4

20 回答 20

88

Excel 没有任何方法可以做到这一点。

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

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

于 2009-07-13T14:09:30.783 回答
54

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

就像是:

For Each cell in SomeRange
  If (cell.value = SomeTest) Then cell.ClearContents
Next
于 2009-07-13T18:08:58.780 回答
42

是的,有可能。

如果满足条件,则可以使公式返回 trueblank。它通过了ISBLANK公式的测试。唯一的不便是,当条件满足时,公式会蒸发,你将不得不重新输入它。您可以通过将结果返回到相邻单元格来设计一个不会自毁的公式。是的,这也是可能的。

在此处输入图像描述

您只需要设置一个命名范围,例如GetTrueBlank,您就可以像在您的问题中一样使用以下模式:

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

步骤 1.将此代码放入 VBA 的模块中。

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)

B2如果在 中键入 0,则上面的公式将计算为 trueblank A2

您可以在此处下载演示文件

在上面的示例中,将公式计算为 trueblank 会产生一个空单元格。用公式检查单元格的ISBLANK结果为 TRUE。这是原切。满足条件时,公式将从单元格中消失。目标已经实现,尽管您可能希望公式不要消失。

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

相邻小区

我在这里遇到了由 The FrankensTeam 揭示的公式结果得到 trueblank 的示例: https ://sites.google.com/site/e90e50/excel-formula-to-change-the-value-of-another-细胞

于 2016-09-06T14:22:50.783 回答
20

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

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

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

当出现无效的单元格值时,这确实给出了没有点的所需图表。当然,这会使所有具有该无效值的单元格 read #N/A,这很混乱。

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

于 2012-07-16T16:40:29.633 回答
14

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

  • 在你想要一个空白单元格的地方,返回一个0而不是""然后

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

    0;0;"";"text"@
    
于 2011-06-01T06:39:00.080 回答
11

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

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

这三步过程将所有“空”单元格变为“空白”单元格。我尝试通过简单地将空白单元格替换为空白单元格来合并步骤 2 和 3,但这不起作用——我不得不替换带有某种实际文本的空白单元格,然后用空白单元格替换该文本。

于 2011-01-16T18:28:38.530 回答
9

在您的声明中使用COUNTBLANK(B1)>0而不是。ISBLANK(B1)IF

与 不同ISBLANK()COUNTBLANK()认为""为空并返回 1。

于 2016-04-07T09:33:30.147 回答
8

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

于 2009-09-23T16:30:28.490 回答
8

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

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

于 2013-06-24T19:55:56.813 回答
6

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

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

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

将以下代码(基于 JT 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 错误将保持未删除状态

于 2013-11-07T22:35:00.303 回答
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

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

于 2016-10-22T19:15:14.390 回答
3

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

当您进行任何计算时,“”会给您错误,因此您想将其视为数字,因此我使用嵌套 if 语句返回 0 而不是“”,然后如果结果为 0,则此等式将返回“”

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

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

于 2013-09-30T07:02:31.497 回答
3

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

=IF(condition,T(1),value)
于 2019-08-18T14:55:20.963 回答
1

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

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

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

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

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

我不知道这是否适用于其他功能......我没有尝试过。我正在使用 Excel 2007 来实现这一点。

编辑

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

于 2011-05-09T06:48:35.143 回答
1

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

它使用该函数检查语句中ISBLANK的单元格是否真的为空。IF如果单元格中有任何内容,A1在此示例中,甚至是空格字符,则单元格中没有EMPTY,并且将产生计算结果。这将防止显示计算错误,直到您有数字可以使用。

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

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

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

于 2012-12-29T19:04:38.343 回答
0

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

于 2011-10-04T15:35:38.873 回答
0

我去掉了单引号,因此 +1-800-123-4567 这样的电话号码列不会导致计算并产生负数。我尝试了一个 hack 来删除空单元格上的它们,禁止引用,然后也遇到了这个问题(F 列)。在源单元格上调用文本要容易得多,瞧!:

=IF(F2="'","",TEXT(F2,""))
于 2020-10-07T05:35:01.513 回答
0

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

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

于 2021-04-10T09:47:24.110 回答
0

♣ 已解决(种类:)♣</h2>

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

截图:

场景一:非空函数结果

场景 2:EMPTY 函数结果

备注:永远不要说永远!☻</p>

链接到 Google 表格示例

享受

于 2021-05-05T03:42:39.233 回答
-1

谷歌给我带来了一个非常相似的问题,我终于找到了一个适合我需要的解决方案,它也可能对其他人有所帮助......

我使用了这个公式:

=IFERROR(MID(Q2, FIND("{",Q2), FIND("}",Q2) - FIND("{",Q2) + 1), "")
于 2017-02-07T22:48:39.773 回答