当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《从Excel中的公式返回空单元格》经验,为你挑选了10个好方法。

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

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



1> Joe Erickson..:

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

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

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


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

2> J.T. Grimes..:

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

就像是:

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


这很强烈,Excel中没有空常量.
我想补充一点:如果你想要清除空白单元格的特定范围的单元格,你可以给该范围命名,然后通过将SomeRange更改为Range("MyRange")来修改Boofus的公式.要为单元格设置名称,请选择单元格,单击功能区的"公式"选项卡上的"定义名称",然后在"名称"字段中输入"MyRange".(当然你可以用你想要的任何东西替换MyRange.)
如果您将宏放在worksheet_calculate()函数中,那么它将自动清空单元格.具体细节你可以在下面看到我的答案.
@brettdj那是VBA,而不是Excel.我们对像NULL()或BLANK()之类的函数进行了漫长而艰苦的游说,但无济于事.
@ ted.strauss有'VbNullString`

3> Przemyslaw R..:

对的,这是可能的.

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

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

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

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

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

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

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

在此输入图像描述

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

=IF(A2=0,GetTrueBlank,A2)

在此输入图像描述

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-细胞


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

4> 小智..:

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

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

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

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

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


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

5> 小智..:

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

    我对所有数据进行了"复制",并将数据粘贴为"值".

    然后我突出显示粘贴的数据并用一些字母"替换"(Ctrl- H)空单元格,我选择了q因为它不在我的数据表的任何地方.

    最后,我做了另一个"替换",并q没有替换.

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


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

6> 小智..:

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

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

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

0;0;"";"text"@


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

7> 小智..:

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



8> 小智..:

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

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



9> Mr Purple..:

如此多的答案返回一个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

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

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

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


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

10> Kevin Vuille..:

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

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

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有