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

Bry*_*ard 210 excel excel-formula

我需要从Excel公式返回一个空单元格,但看起来Excel处理空字符串或对空单元格的引用与真正的空单元格不同.所以基本上我需要类似的东西

=IF(some_condition,EMPTY(),some_value)
Run Code Online (Sandbox Code Playgroud)

我试着做一些事情

=IF(some_condition,"",some_value)
Run Code Online (Sandbox Code Playgroud)

=IF(some_condition,,some_value)
Run Code Online (Sandbox Code Playgroud)

并假设B1是一个空单元格

=IF(some_condition,B1,some_value)
Run Code Online (Sandbox Code Playgroud)

但这些似乎都不是真正的空单元格,我猜是因为它们是公式的结果.当且仅当满足某些条件并且保持单元格真正为空时,是否有任何方法可以填充单元格?

编辑:按照建议,我试图返回NA(),但为了我的目的,这也没有用.有没有办法用VB做到这一点?

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

Joe*_*son 73

Excel没有任何方法可以执行此操作.

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

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

  • 对于设置为将空单元格显示为间隙的图形,NA()方法100%工作,这可能不适用于导出到需要单元格为空的应用程序的情况,因为它包含公式... (18认同)
  • **NA()不会导致差距.**每个人都错了.如果值为NA()或#N/A,Excel将不会绘制标记,但它会在相邻的非#N/A值之间绘制一条内插线. (12认同)
  • 没有完美的解决方案.NA()是一个不错的选择.另一个是空字符串(依赖)''或"" (4认同)

J.T*_*mes 50

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

就像是:

For Each cell in SomeRange
  If (cell.value = SomeTest) Then cell.ClearContents
Next
Run Code Online (Sandbox Code Playgroud)

  • 这很强烈,Excel中没有空常量. (27认同)
  • 我想补充一点:如果你想要清除空白单元格的特定范围的单元格,你可以给该范围命名,然后通过将SomeRange更改为Range("MyRange")来修改Boofus的公式.要为单元格设置名称,请选择单元格,单击功能区的"公式"选项卡上的"定义名称",然后在"名称"字段中输入"MyRange".(当然你可以用你想要的任何东西替换MyRange.) (6认同)
  • 如果您将宏放在worksheet_calculate()函数中,那么它将自动清空单元格.具体细节你可以在下面看到我的答案. (5认同)
  • @brettdj那是VBA,而不是Excel.我们对像NULL()或BLANK()之类的函数进行了漫长而艰苦的游说,但无济于事. (5认同)
  • @ ted.strauss有'VbNullString` (3认同)
  • @brettdj 实际上,最初的问题提供了一堆不返回空单元格的工作表公式。在 VBA 中,您始终可以清除单元格,如果它不再是空白,则可以重新创建公式,但这很笨拙而且不是很深刻。有一个 NULL() 工作表公式可供我们使用意味着我们不需要调用 VBA。 (2认同)

Prz*_*min 37

对的,这是可能的.

如果满足条件,可以使湮灭公式评估为真实空白.它通过了ISBLANK公式的测试.我在FrankensTeam的集合中找到了这个看似不可能的技巧(参见下文).

设置3个步骤后,您将能够使用命名范围ISBLANK,就像您在答案中所希望的那样:

=IF(A1 = "Hello world", GetTrueBlank, A1)
Run Code Online (Sandbox Code Playgroud)

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

Function Delete_UDF(rng)
    ThisWorkbook.Application.Volatile
    rng.Value = ""
End Function
Run Code Online (Sandbox Code Playgroud)

步骤2.GetTrueBlankSheet1小区添加命名范围A1与下面的公式:

=EVALUATE("Delete_UDF("&CELL("address",Sheet1!A1)&")")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

第3步.使用自我消灭公式.放入单元格,比如GetTrueBlank下面的公式:

=IF(A2=0,GetTrueBlank,A2)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

B2如果输入0,上面的公式将评估为trueblank B2.

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

在上面的示例和FrankensTeam的所有其他示例中,将公式计算为trueblank会导致空单元格.使用ISBLANK公式检查结果结果为TRUE.这些是hara-kiri喜欢的公式.当满足条件时,公式从单元格中消失.达到了目标,尽管您可能希望公式不会消失.

您可以尝试使用此公式将结果返回到相邻单元格中,而不是自杀.玩得开心!

我已经通过以下示例获得了一个真实的空白作为一个公式结果由FrankensTeam重新审视:https: //sites.google.com/site/e90e50/excel-formula-to-change-the-value-of-another-细胞

  • 这是一个很好的解决方法,尽管如果没有物理清空单元格,就没有办法做到这一点非常疯狂.这里唯一的缺点是你必须记住在重新计算时重新拖动公式,尽管我猜你可以设置一个工作簿事件来做到这一点. (5认同)

小智 20

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

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

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

当无效单元格值出现时,这确实为所需图形提供了无点.当然这会使所有具有无效值的单元格都被读取#N/A,而且这很麻烦.

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

  • 没有!!!"将空单元格显示为间隙"要求单元格为EMPTY.如果它们包含#N/A而不是NOTHING,那么绘图程序将在#N/A单元格上进行插值,而不是将它们留在行中的间隙中.如果你希望内插#N/A单元格很好,但在这种情况下"将空单元格显示为间隙"不适用 (6认同)
  • @GreenAsJade这不是真正的答案,因为它不符合OP的需求.图形问题确实应该有一个单独的问题. (4认同)

小智 10

这就是我为我使用的数据集做的.这似乎是错综复杂和愚蠢的,但它是学习如何使用上述VB解决方案的唯一选择.

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

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

  • 这对我来说是最好的,因为我不需要它是自动的,但我需要它很快.从本质上讲,这意味着Excel尊重通过查找和替换添加的空白值,这对我来说已经足够了! (4认同)

小智 9

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

  • 你想要一个空白单元格,返回一个0而不是""那么

  • 设置像这样的单元格的数字格式,你必须得到你想要的正数和负数(前两个项目用分号分隔).在我的情况下,我的数字是0,1,2 ......我希望0显示为空.(我从未弄清楚文本参数的用途,但似乎是必需的).

    0;0;"";"text"@
    
    Run Code Online (Sandbox Code Playgroud)

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

小智 7

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


小智 7

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

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


Mr *_*ple 6

如此多的答案返回一个LOOKS为空的值,但实际上并不像请求的单元格那样空...

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

打开"visual basic viewer"(Alt + F11)在项目资源管理器中找到感兴趣的工作簿,然后双击它(或右键单击并选择视图代码).这将打开"视图代码"窗口.在(常规)下拉菜单中选择"工作簿",在(声明)下拉菜单中选择"SheetCalculate".

在Workbook_SheetCalculate函数中粘贴以下代码(基于JT Grimes的答案)

    For Each cell In Sh.UsedRange.Cells
        If IsError(cell.Value) Then
            If (cell.Value = CVErr(xlErrNA)) Then cell.ClearContents
        End If
    Next
Run Code Online (Sandbox Code Playgroud)

将文件另存为启用宏的工作簿

注意:这个过程就像一把手术刀.它将删除评估为#N/A错误的任何单元格的全部内容,因此请注意.他们会去,你不能重新进入他们曾经包含的公式.

NB2:显然你需要在打开文件时启用宏,否则它将无法工作,#N/A错误将保持未删除状态

  • 如果您需要全自动/免提/动态,并且您不想重新输入公式以生成#NA错误,您可以重写宏代码以复制有问题的工作表,留下空单元格代替#NA然后生成图形从重复的表格.(如果此评论被投票,我将添加代码). (2认同)

Kev*_*ier 6

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

不像ISBLANK(),COUNTBLANK()认为""是空的并返回1.


Ahm*_*hid 6

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

=IF(condition,T(1),value)
Run Code Online (Sandbox Code Playgroud)

  • 创建零长度字符串 (ISBLANK(CELL) = FALSE)。 (11认同)

小智 5

This answer does not fully deal with the OP, but there are have been several times I have had a similar problem and searched for the answer.

If you can recreate the formula or the data if needed (and from your description it looks as if you can), then when you are ready to run the portion that requires the blank cells to be actually empty, then you can select the region and run the following vba macro.

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
Run Code Online (Sandbox Code Playgroud)

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