2009-07-13 160 views
168

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

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

+7

你能解释为什么单元格需要空白吗?根据什么“空白”得到你,可能有一个解决方法。 –

+3

单元格包含公式,不是吗?那它怎么可能是空的或空白的? –

+8

我有一个类似的问题,我正在绘制图形,不想在图表上显示空白项目的值0。如果记录是空单元格,它会从图中省略它们,但下面“答案”中列出的任何方法都会在图上显示0。 :( – Cobusve

回答

43

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

喜欢的东西:

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

我想补充一点:如果你总是有一个特定范围的单元格来清除空白单元格,你可以给这个范围一个名字,然后通过改变SomeRange到Range(“MyRange”)来修改Boofus的公式。要为单元格设置名称,请选择单元格,然后在功能区的“公式”选项卡上单击“定义名称”,然后在名称字段中输入“MyRange”。 (当然,你可以用你想要的任何东西代替MyRange。) – devuxer

+0

我对这个解决方案稍作修改就结束了。然后我将它设置为在文件保存之前运行,并且一切都很好。 –

+16

这是激烈的,Excel中没有空常量。 –

59

Excel没有办法做到这一点。

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

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

+13

对于设置为将空单元格显示为空白的图形,NA()方法100%工作,对于导出到需要单元格为空白的应用程序的情况,这可能不起作用,因为它包含公式。 – Cobusve

+3

没有完美的解决方案。不适用()是一个不错的选择。 另一个是(取决于)的空字符串“”或“” – Jason

+0

这适用于在将要绘制的数据中以二元方式返回空单元格的目的,以便您可以有效地使用忽略空单元格作为图表。在我的情况下,我试图绘制12个值来代表每月的进展,但只能到上个月,用这样的公式:= IF(MONTH(TODAY())> C2; $ C $ 11 + C7; NA( )) – EKI

5

请评价使用LEN细胞。如果它包含公式LEN将返回0。如果它包含文本,它将返回大于0

+0

尽管这对最初的提问者没有帮助,但在许多情况下,这实际上并不是一个很好的答案。适用于您被迫返回“”的情况。 – Technium

9

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

  1. 我做了所有数据的“复制”,并将数据粘贴为“值”。
  2. 然后,我强调了粘贴的数据,并做了“替换”(按Ctrl - ^h)空单元格的一些信,我选择q因为它不是我的数据表中的任何地方。
  3. 最后,我做了另一个“替换”,并将其替换为q

这三步过程接通所有“空”细胞进入“空白”细胞”。我试图合并步骤2 & 3通过简单地用一个空白小区更换空白单元格,但没有与工作 - 我必须用某种实际文本替换空白单元格,然后用空白单元格替换该文本。

+0

虽然这可能适用于您的情况,但我需要一个可以自动应用的解决方案。最终,我认为我使用了一个VB宏来清除被确定为空的东西。这个宏在保存文件之前运行。 –

+2

这对我来说是最好的,因为我不需要它是自动的,但我需要它很快。基本上,这意味着Excel尊重通过查找和替换添加的空白值,这对我来说已经足够了! – rickcnagy

+0

伟大的解决方法。谢谢! –

1

如果使用查找函数(如HLOOKUP和VLOOKUP)将数据放入工作表中,请将该函数放在括号内例如,

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

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

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

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

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

编辑

要真正得到一个IF(A1 =“”,)回来作为真正有需要在由&分隔同一个小区两个查找。解决这个问题的简单方法是,使第二个查找位于该行末尾的单元格始终为空。

7

如果目标是要能显示单元作为空时,它实际上具有零值,则代替使用式,结果在一个空白或空细胞(因为没有empty()函数)代替,

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

  • 设置单元格像这样,在那里你将不得不拿出你想要的正面和数字格式负数(前两项用分号分隔)。就我而言,我的数字是0,1,2 ......而我想让0显示为空。 (我从来没有弄清楚是什么文本参数被用于,但它似乎是必需的)。

    0;0;"";"text"@ 
    
+2

虽然这不会使单元格变空(没有办法让公式导致空单元格),但如果数字为零,则看起来为空。但是,这是不正确的。它应该是0; -0;“”(注意减号)或者甚至是0; -0;根本没有任何引号。第三个分号和“text”@部分不是必需的。分号分隔字段的含义是:如何显示正数,负数,零和文本(后一种格式必须包含@)。 http://office.microsoft.com/en-gb/excel-help/create-or-delete-a-custom-number-format-HP005199500.aspx – cvoinescu

+0

你是神的先生。你从视觉基础中拯救了我。你规则 – CommaToast

0

答案是肯定的 - 你不能使用= IF()函数和离开细胞空白。 “看起来空虚”与空洞不一样。这是一个耻辱两个引号背对背没有删除公式没有产生一个空单元格。

+0

如果你准备使用VBA,你可以。根据其他一些答案。 –

12

也许这是作弊,但它的作品!

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

然后在可能最终结果是您不需要绘图,请将公式放入IF语句中,并使用NA()结果(如= IF($ A8> TODAY(),NA(),公式

当发生无效单元格值时,这确实会给出所需的图形,并且没有点。当然,这会让所有具有该无效值的单元格读取“#N/A”,这很麻烦。

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

+3

是的!耶,谢谢!这是真正的答案! – GreenAsJade

+3

不! “将空单元格显示为间隙”要求单元格为空。如果它们包含#N/A而不是NOTHING,那么绘图程序将在#N/A单元上进行插值,而不是将它们留在线中的间隙。如果你希望插入#N/A单元格,那很好,但是在这种情况下“显示空单元格为空格”不适用 –

+2

@GreenAsJade这不是真正的答案,因为它不符合OP的需求。对于图形问题,应该有一个单独的问题。 – ZX9

1

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

它使用ISBLANK函数检查单元在IF语句中是否真空。 如果单元格中有任何东西,在本例中为A1,即使是空格字符,那么该单元格也不是EMPTY并且会导致计算结果。 这将保持显示计算错误,直到你有数字处理。

如果单元格为EMPTY那么计算单元格将不显示计算中的错误。如果单元格为NOT EMPTY,则会显示计算结果。 如果您的数据不好,这会引发错误,令人生畏的#DIV/0

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

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

+0

这样做的问题是您必须使用此结果将此检查传播到每个其他单元格。 – guthrie

5

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

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

+1

是的,那是我做的。我使用了一个函数来生成“#EMPTY”,然后在“工作表计算”事件子例程中加入一些代码。查看我的答案以获得完整解决方案。 –

2

我用下面的解决办法,使我的Excel探讨清洁:

当你进行任何计算的“”会给你错误,所以你要正确对待它作为一个数,所以我使用了嵌套的if语句返回0 istead的“”,然后如果结果为0这个公式将返回“”

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

这样的excel表看起来干净......返回一个值

+1

这不是解决问题的办法。该图表看上去很干净,但就图形而言,值“”不是“空的”。 – GreenAsJade

4

所以很多答案是LOOKS为空,但实际上并不像请求的单元格那样空。

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

打开“视觉基本查看器”(Alt + F11) 在项目浏览器中找到感兴趣的工作簿并双击它(或右键单击并选择查看代码)。这将打开“查看代码”窗口。在(General)下拉菜单中选择“Workbook”,在(Declarations)下拉菜单中选择“SheetCalculate”。

的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 

内将下面的代码(基于由J.T. Grimes的答案)粘贴文件保存为一个宏工作簿启用

注:此过程就像手术刀。它会删除评估为#N/A错误的所有单元的全部内容,因此请注意。他们会去,你不能重新进入他们原来所包含的配方而无法让他们回来。

NB2:显然,你需要启用宏当您打开其他文件将无法正常工作和#N/A错误会保持未删除

+0

如果你需要它是完全自动/免提/动态的,你不想重新输入公式来产生#NA错误,你可以重写宏代码来复制问题表单,留下空单元格代替#NA,然后生成来自复制表格的图表。 (如果此评论被提升,我会添加代码)。 –

7

使用COUNTBLANK(B1)>0,而不是你的ISBLANK(B1)声明IF里面。

不像ISBLANK()COUNTBLANK()认为""为空和返回1

+0

不幸的是,它似乎Excel拒绝= COUNTBLANK(IFNA(VLOOKUP(...),“”))无效(!) – NetMage

14

是的,这是可能的。

如果条件得到满足,可能会有一个歼灭公式评估为trueblank。它通过了ISBLANK公式的测试。这个看似不可能的技巧可以通过几种不同的方式完成。这里是我最喜欢的FrankensTeam系列的例子。

您可以使用,例如:

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

定义GetTrueBlank命名范围后。

第1步。将此代码置于模块中。

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

关于VBA代码的两点评论。 (1)不要误导rng.Value=""命名的愤怒GetTrueBlank将最终成为一个真空,而不是像双引号=""中的空字符串。 (2)在我的测试中,FrankensTeam最初使用的第一行代码ThisWorkbook.Application.Volatile被证明是不必要的。

步骤2.A1细胞Sheet1添加名为范围GetTrueBlank用下面的公式:

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

enter image description here

步骤3.使用自零化公式。在小区放,说B2,公式如下:

=IF(A2=0,GetTrueBlank,A2) 

enter image description here

B2上述公式将评估为trueblank,如果你在A2键入0。

您可以download a demonstration file here

在上面的例子以及The FrankensTeam的所有其他例子中,评估公式为trueblank会导致一个空单元格。使用ISBLANK公式检查结果在TRUE中为正值。这些是hara-kiri喜欢的公式。公式在条件满足时从公式中消失。目标已经达成,但问题的作者可能希望公式不要消失。

请注意,可能会修改这些示例以在相邻单元格中显示结果,而不会自行查杀。但这是另一个问题,就是如何将公式结果存储在不同的单元格中,然后自行配置。

我来翻过得到一个trueblank由FrankensTeam这里reaveled公式结果的例子: https://sites.google.com/site/e90e50/excel-formula-to-change-the-value-of-another-cell

+2

这是一个甜蜜的解决方法,虽然很疯狂,没有办法做到这一点而不用物理地清空细胞。这里唯一的缺点是你必须记住在重新计算时重新拖动公式,但我想你可以设置一个工作簿事件来做到这一点。 –

3

这个答案并不完全处理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 

这将消灭掉它显示当前""或只有一个公式

-1

谷歌把我带到这里有一个非常类似的问题的任何单元格的内容,我终于想出了一个解决办法适合我的需要,它可能会帮助别人太...

我用这个公式:

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

这似乎是一个简单的答案该作品已被错过。

在电子表格中命名空单元格BlankCell

返回BlankCell在您的公式中,例如,

=ISBLANK(IFNA(VLOOKUP(A2,SomeTable,2,False),BlankCell)) 

这将返回TRUE如果ISBLANK(VLOOKUP(A2,SomeTable,2,False))TRUE

+0

该公式会将对BlankCell的引用传递给ISBLANK函数,该函数将返回TRUE。但问题是将一个空白值返回给单元格。作为公式的结果返回BlankCell的引用实际上会给出值0.问题的第一行说这不适合。 – Michael

+0

是不是一个包含公式定义不是空白单元格的单元格? – NetMage

+0

是的。这就是为什么用一个标准公式来回答原始问题是不可能的。 – Michael

相关问题