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

=IF(some_condition,EMPTY(),some_value)

我试着去做一些事情

=IF(some_condition,"",some_value)

and

=IF(some_condition,,some_value)

假设B1是空单元格

=IF(some_condition,B1,some_value)

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

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

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


当前回答

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

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

其他回答

Excel没有办法做到这一点。

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

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

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

我用了这个公式:

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

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

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

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

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

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

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

这可以在Excel中完成,而不需要使用新的图表功能将#N/A设置为间隔。但它很精细。假设你想在XY图上画一条线。然后: 第一行,第1点 第二行,第2点 第三行:硬空 第四行,第二点 第五行,第3点 第6行:硬空 第七行,第3点 第八行,第4点 第9行:硬空 等

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