我需要从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做到这一点?编辑:我正在构建一个工作表,从其他工作表中提取数据,这些数据格式化为将数据导入数据库的应用程序的特定需求。我没有权限更改此应用程序的实现,如果值为“”而不是实际为空,则会失败。
答案 0 :(得分:69)
Excel无法做到这一点。
Excel中单元格中公式的结果必须是数字,文本,逻辑(布尔值)或错误。没有公式单元格值类型“空”或“空白”。
我所看到的一种做法是使用NA()和ISNA(),但这可能会或可能不会真正解决您的问题,因为NA()被其他函数处理的方式存在很大差异(SUM (NA())是#N / A,而如果A1为空则SUM(A1)为0。
答案 1 :(得分:46)
然后你将不得不使用VBA
。您将遍历范围内的单元格,测试条件,并删除匹配的内容。
类似的东西:
For Each cell in SomeRange
If (cell.value = SomeTest) Then cell.ClearContents
Next
答案 2 :(得分:28)
是的,有可能。
如果满足条件,可以使湮灭公式评估为trueblank。它通过了ISBLANK
公式的测试。
设置3个步骤后,您可以在答案中使用命名范围GetTrueBlank
:
=IF(A1 = "Hello world", GetTrueBlank, A1)
第1步。将此代码放入VBA模块中。
Function Delete_UDF(rng)
ThisWorkbook.Application.Volatile
rng.Value = ""
End Function
第2步。在Sheet1
个A1
个单元格中,使用以下公式添加命名范围 GetTrueBlank
:
=EVALUATE("Delete_UDF("&CELL("address",Sheet1!A1)&")")
第3步。使用自我湮灭公式。放入单元格,比如B2
,使用以下公式:
=IF(A2=0,GetTrueBlank,A2)
如果您在B2
中输入0,则A2
中的上述公式将评估为trueblank。
您可以 download a demonstration file here 。
在上面的示例中,将公式计算为trueblank会导致空单元格。使用ISBLANK
公式检查结果肯定为TRUE。这是hara-kiri喜欢的配方。当满足条件时,公式从单元格中消失。达到了目标,尽管您可能希望公式不会消失。
您可以修改公式以在相邻单元格中返回结果,以便公式不会自行终止。 See how to get UDF result in adjacent cell。
我在这里看到了FrankensTeam揭示的一个真实空白作为公式结果的例子: https://sites.google.com/site/e90e50/excel-formula-to-change-the-value-of-another-cell
答案 3 :(得分:18)
也许这是作弊,但它确实有效!
我还需要一个表格作为图表的来源,我不希望任何空白或零单元格在图形上产生一个点。确实,您需要设置图形属性,选择数据,隐藏和清空单元格以“将空单元格显示为间隙”(单击单选按钮)。这是第一步。
然后在可能最终得到您不想绘制的结果的单元格中,将公式放在带有NA()
结果的IF语句中,例如=IF($A8>TODAY(),NA(), *formula to be plotted*)
当发生无效的单元格值时,这确实给出了没有点的所需图形。当然,这会使所有具有无效值的单元格都显示为#N/A
,而这很麻烦。
要清除它,请选择可能包含无效值的单元格,然后选择条件格式 - 新规则。选择“仅格式化包含”的单元格,并在规则说明下从下拉框中选择“错误”。然后在格式下选择字体 - 颜色 - 白色(或任何你的背景颜色)。单击各个按钮以退出,您应该看到具有无效数据的单元格看起来是空白的(它们实际上包含#N/A
但白色背景上的白色文本看起来是空白的。)然后链接的图形也不会显示无效的值点
答案 4 :(得分:10)
这就是我为我使用的数据集所做的。这似乎是错综复杂和愚蠢的,但它是学习如何使用上述VB解决方案的唯一选择。
q
因为它我的数据表上没有任何内容。q
。 这个三步过程将所有“空”细胞变成“空白”细胞“。我尝试通过简单地用空白细胞替换空白细胞来合并步骤2和3,但这不起作用 - 我必须用某种实际文本替换空白单元格,然后用空白单元格替换该文本。
答案 5 :(得分:8)
如果目标是当一个单元实际上具有零值时能够将单元格显示为空,那么而不是使用导致空单元格或空单元格的公式(因为没有empty()
函数)相反,
您想要一个空白单元格,返回0
代替""
,然后返回
设置像这样的单元格的数字格式,在那里你必须得到你想要的正数和负数(前两个用分号分隔的项目)。在我的情况下,我的数字是0,1,2 ......我希望0显示为空。 (我从未弄清楚文本参数的用途,但似乎是必需的。)
0;0;"";"text"@
答案 6 :(得分:6)
尝试使用LEN
评估单元格。如果它包含公式LEN
,则会返回0
。如果它包含文本,则返回大于0
。
答案 7 :(得分:6)
在COUNTBLANK(B1)>0
声明中使用ISBLANK(B1)
代替IF
。
与ISBLANK()
不同,COUNTBLANK()
将""
视为空并返回1.
答案 8 :(得分:6)
因此,您必须返回“魔术值”,然后使用搜索和替换或使用VBA脚本将其替换为无值。虽然您可以使用空格或“”,但我的建议是使用明显的值,例如“NODATE”或“NONUMBER”或“XXXXX”,以便您可以轻松查看它出现的位置 - 很难找到“”在电子表格中。
答案 9 :(得分:6)
这么多答案会返回一个LOOKS为空的值,但实际上并不像请求的那样为空格...
根据要求,如果您确实需要一个返回空单元格的公式。这可以通过VBA实现。所以,这里的代码就是这样做的。首先编写一个公式,以便在希望单元格为空的任何地方返回#N / A错误。然后我的解决方案会自动清除包含#N / A错误的所有单元格。当然,您可以修改代码,根据您喜欢的任何内容自动删除单元格的内容。
打开“visual basic viewer”(Alt + F11) 在项目资源管理器中找到感兴趣的工作簿,然后双击它(或右键单击并选择视图代码)。这将打开“视图代码”窗口。在(常规)下拉菜单中选择“工作簿”,在(声明)下拉菜单中选择“SheetCalculate”。
在Workbook_SheetCalculate函数中粘贴以下代码(基于J.T.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错误将保持未删除
答案 10 :(得分: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
这将消除当前显示""
或仅包含公式的任何单元格的内容
答案 11 :(得分:2)
我使用了以下方法使我的excel看起来更干净:
当你进行任何计算时,“”会给你错误,所以你想把它当成一个数字,所以我用一个嵌套的if语句返回0而不是“”,然后如果结果为0,这个等式将返回“”
=IF((IF(A5="",0,A5)+IF(B5="",0,B5)) = 0, "",(IF(A5="",0,A5)+IF(B5="",0,B5)))
这样excel表看起来很干净......
答案 12 :(得分:1)
到目前为止,这是我能想到的最好的。
它使用ISBLANK
函数检查IF
语句中的单元格是否为空。
如果单元格中有任何内容,在此示例中为A1
,即使是空格字符,则单元格不是
EMPTY
,也会产生计算结果。
这将使计算错误无法显示,直到您有数字可供使用。
如果单元格为EMPTY
,则计算单元格将不显示计算中的错误。如果单元格为NOT EMPTY
,则将显示计算结果。
如果您的数据不好,可怕的#DIV/0
!
=IF(ISBLANK(A1)," ",STDEV(B5:B14))
根据需要更改单元格引用和公式。
答案 13 :(得分:1)
如果使用HLOOKUP和VLOOKUP之类的查找函数将数据放入工作表中,则将函数放在括号内,函数将返回空单元而不是{0}。例如,
如果查找单元格为空,则返回零值:
=HLOOKUP("Lookup Value",Array,ROW,FALSE)
如果查找单元格为空,这将返回一个空单元格:
=(HLOOKUP("Lookup Value",Array,ROW,FALSE))
我不知道这是否适用于其他功能......我没试过。我使用Excel 2007来实现这一目标。
修改
要实际获得一个IF(A1 =“”,)以回归为真,需要在同一个单元格中进行两次查找,并由&amp ;.分隔。解决这个问题的简单方法是使第二个查找位于行末的单元格,并且始终为空。
答案 14 :(得分:1)
我使用的是一个小技巧。 我使用了T(1),它返回了一个空单元格。 T是excel中的一个函数,如果它是一个字符串,则返回其参数,否则返回一个空单元格。因此,您可以做的是:
=IF(condition,T(1),value)
答案 15 :(得分:0)
答案是肯定的 - 你不能使用= IF()函数并将单元格留空。 “看起来空”与空不一样。令人遗憾的是,背靠背的两个引号不会在不擦除公式的情况下产生空单元格。
答案 16 :(得分:0)
我正在删除单引号,因此电话号码列(例如+ 1-800-123-4567)不会导致计算并产生负数。 我试图通过黑客手段将它们删除在空单元格上,加引号,然后再打这个问题(F列)。只需在源单元格上调用文本就可以了!
a
答案 17 :(得分:0)
这可以在 Excel 中完成,无需使用将#N/A 设置为间隙的新图表功能。但它很繁琐。假设您想在 XY 图表上画线。然后:
第 1 行:第 1 点
第 2 行:第 2 点
第 3 行:硬空
第 4 行:第 2 点
第 5 行:第 3 点
第 6 行:硬空
第 7 行:第 3 点
第 8 行:第 4 点
第 9 行:硬空
等
结果是很多单独的行。点的公式可以控制是否被#N/A 省略。通常是将 INDEX() 点到另一个范围的公式。
答案 18 :(得分:0)
继我对主要 Q 的评论之后 - 请参阅下面谷歌表格中场景 1 和 2 下的列表应用。不健壮,但如果函数输出是主要兴趣(并且能够在不同的条件集下显示完全空白的单元格),则“可以完成工作”。
屏幕截图:
注意:永远不要说永远! ☻
链接到 Google 表格示例
答案 19 :(得分:-1)
我使用了这个公式:
=IFERROR(MID(Q2, FIND("{",Q2), FIND("}",Q2) - FIND("{",Q2) + 1), "")