我需要从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来做这个吗?

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


当前回答

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

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

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

其他回答

Excel没有办法做到这一点。

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

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

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

喜欢的东西:

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

这个答案并没有完全解决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

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

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

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

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

因此,您必须返回一个“魔法值”,然后使用搜索和替换或使用VBA脚本将其替换为无值。虽然你可以使用空格或“”,但我的建议是使用一个明显的值,比如“NODATE”或“NONUMBER”或“XXXXX”,这样你就可以很容易地看到它出现在哪里——在电子表格中很难找到“”。