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

264

我需要从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实现此操作的方法?

编辑:我正在构建一个工作表,从其他工作表中获取数据,并将其格式化为导入数据到数据库应用程序的非常特定要求。我无法更改此应用程序的实现方式,如果值为空字符串而不是真正的空值,则会失败。


8
您能解释一下为什么单元格需要空白吗?根据“空白”能给您带来什么,可能会有解决方法。 - J.T. Grimes
3
这个单元格包含公式,不是吗?那么它怎么可能是空的或者空白的呢? - Sinan Ünür
11
我有一个类似的问题,我正在绘制一个图表,不想在图表上显示空项目的值为0。如果记录是空单元格,则会从图表中省略它们,但是“答案”下面列出的任何方法都会导致在图表上显示0。 :( - Cobusve
5
为避免在图表中显示零值,应使用NA()函数替代空字符串/零。这将在单元格中放置#N/A,而图表程序会忽略它。 - Rob
5
Rob建议使用#N/A与空单元格具有不同的结果。 #N/A将导致绘图程序在单元格上进行插值处理,而真正的空单元格将被视为线条中的间隙。如果您想要在线条中显示间隙而不是穿越间隙的插值处理,则需要使单元格为空,而不是#N/A。下面有解决方案可以按照问题要求解决此问题。 - Mr Purple
显示剩余2条评论
20个回答

7

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

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

10
创建一个零长度的字符串(ISBLANK(CELL) = FALSE)。 - vinh
1
这个方法可行,应该被采纳为答案。非常感谢,Ahmed。我的使用情况有些不同。我想让单元格保持为空,以便聚合函数如AVERAGE()、MIN()、MAX()、STDEV()、COUNT()和MEDIAN()会忽略这些值。 - Charlie Reitzel

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

这将清除当前显示 "" 或仅包含公式的任何单元格中的所有内容。


3
我使用以下方法来使我的Excel看起来更整洁:
当进行任何计算时,双引号会导致错误,因此您需要将其视为数字。因此,我使用了嵌套的if语句,以返回0而不是"",然后如果结果为0,则该方程式将返回""。
=IF((IF(A5="",0,A5)+IF(B5="",0,B5)) = 0, "",(IF(A5="",0,A5)+IF(B5="",0,B5)))

这样做可以使 Excel 表格看起来更加整洁...

1
这不是问题的解决方案。该表看起来很干净,但对于图表而言,值“”并不是“空的”。 - GreenAsJade

1

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

它使用ISBLANK函数在IF语句中检查单元格是否真正为空。 如果单元格中有任何内容,例如此示例中的A1,即使是空格字符,则该单元格也不是EMPTY,计算将得出结果。 这将保持计算错误直到您有数字可用。

如果单元格为空,则计算单元格将不显示计算错误。如果单元格不为空,则将显示计算结果。 如果数据有误,这将引发错误,即可怕的#DIV/0

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

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


1
问题在于,您必须将此检查传播到使用此结果的每个其他单元格。 - guthrie

1
如果您正在使用像HLOOKUP和VLOOKUP这样的查找函数将数据带入工作表中,请将函数放在括号内,函数将返回一个空单元格而不是{0}。例如,
如果查找单元格为空,则将返回零值:
    =HLOOKUP("Lookup Value",Array,ROW,FALSE)

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

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

我不知道这是否适用于其他函数...我还没有尝试过。我正在使用Excel 2007来实现这个。

编辑

要使IF(A1="", , )实际返回true,需要在同一单元格中进行两次查找,用&分隔。简单的方法是将第二个查找设置为行末的空单元格。


1

如果你和我一样,想要一个空单元格,以便单元格中的文本可以溢出到相邻的单元格,请返回"",但将单元格格式文本方向设置为旋转5度。如果你左对齐,你会发现这会导致文本像空单元格一样溢出到相邻的单元格。

看看之前和之后的效果: enter image description here

=IF(RANDARRAY(2,10,1,10,TRUE)>8,"abcdefghijklmnopqrstuvwxyz","")

请注意,空单元格并非为空,而是包含"",但文本仍可能溢出。

enter image description here


几乎完美 - 我还想将文本扩展到相邻的单元格中 - 但是我有一个公式在左上角返回一个数组 - 所以其他建议对我不起作用 - 这个方法可以 - 在1度的角度下没问题。 - undefined

0

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

结果是很多分离的线。点的公式可以通过#N/A控制是否省略。通常点的公式使用INDEX()函数进入另一个范围。


0
答案肯定是:你不能使用=IF()函数并将单元格保留为空白。 "看起来空白"不等于空白。遗憾的是,两个相邻的引号不能产生一个空单元格而不清除公式。

如果您准备使用VBA,可以这样做。根据其他答案。 - Mr Purple

0

我正在去除单引号,以便电话号码列(例如+1-800-123-4567)不会导致计算并产生负数。我尝试了一种方法,在空单元格上删除它们,但保留引号,然后也遇到了这个问题(F列)。直接在源单元格上调用文本就容易多了!

=IF(F2="'","",TEXT(F2,""))

-1

谷歌带我来到这里,面对一个非常相似的问题,最终我找到了适合我的解决方案,或许能帮助其他人...

我使用了这个公式:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接