我需要从 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做到这一点?
编辑:我正在构建一个工作表,该工作表从其他工作表中提取数据,这些数据的格式符合将数据导入数据库的应用程序的非常具体的需求。我无权更改此应用程序的实现,如果值为“”而不是实际为空,则会失败。
Excel 没有任何方法可以做到这一点。
Excel 单元格中公式的结果必须是数字、文本、逻辑(布尔)或错误。没有“空”或“空白”的公式单元格值类型。
我看到的一种做法是使用 NA() 和 ISNA(),但这可能会或可能不会真正解决您的问题,因为其他函数处理 NA() 的方式存在很大差异(SUM(NA( )) 为 #N/A 而 SUM(A1) 为 0 如果 A1 为空)。
那么,您将不得不使用 VBA
。您将遍历范围内的单元格,测试条件,如果匹配则删除内容。
就像是:
For Each cell in SomeRange
If (cell.value = SomeTest) Then cell.ClearContents
Next
VbNullString
对的,这是可能的。
如果满足条件,则可以使公式返回 trueblank。它通过了 ISBLANK
公式的测试。唯一的不便是,当条件满足时,公式会蒸发,你将不得不重新输入它。您可以通过将结果返回到相邻单元格来设计一个不会自毁的公式。是的,这也是可能的。
https://i.stack.imgur.com/cIcWc.gif
您只需要设置一个命名范围,例如 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)&")")
https://i.stack.imgur.com/CxfOr.png
而已。没有进一步的步骤。只需使用自我湮灭公式。将以下公式放入单元格中,例如 B2
:
=IF(A2=0,GetTrueBlank,A2)
如果您在 A2
中键入 0,则 B2
中的上述公式将计算为 trueblank。
您可以download a demonstration file here。
在上面的示例中,将公式计算为 trueblank 会产生一个空单元格。使用 ISBLANK
公式检查单元格的结果为 TRUE。这是原切。满足条件时,公式将从单元格中消失。目标已经实现,尽管您可能希望公式不要消失。
您可以修改公式以在相邻单元格中返回结果,以便公式不会自行终止。 See how to get UDF result in the adjacent cell。
https://i.stack.imgur.com/EfE1r.gif
我在这里遇到了获得真空白作为 The FrankensTeam 揭示的公式结果的示例:https://sites.google.com/site/e90e50/excel-formula-to-change-the-value-of-another-cell
也许这是作弊,但它有效!
我还需要一个作为图表来源的表格,并且我不希望任何空白或零单元格在图表上产生一个点。确实,您需要设置图形属性,选择数据,隐藏和空单元格以“将空单元格显示为间隙”(单击单选按钮)。这是第一步。
然后在可能最终得到您不想绘制的结果的单元格中,将公式放在带有 NA()
结果的 IF 语句中,例如 =IF($A8>TODAY(),NA(), *formula to be plotted*)
当出现无效的单元格值时,这确实给出了没有点的所需图表。当然,这会使所有具有该无效值的单元格读取 #N/A
,这很麻烦。
要清除它,请选择可能包含无效值的单元格,然后选择 条件格式 - 新规则。选择“仅格式化包含的单元格”,然后在规则描述下从下拉框中选择“错误”。然后在格式下选择字体 - 颜色 - 白色(或任何你的背景颜色)。单击各种按钮退出,您应该会看到包含无效数据的单元格看起来是空白的(它们实际上包含 #N/A
,但白色背景上的白色文本看起来是空白的。)然后链接图也不会显示无效值点。
如果目标是能够将一个单元格显示为空,而实际上它的值为零,那么不要使用导致空白或空单元格的公式(因为没有 empty()
函数),
在你想要一个空白单元格的地方,返回一个 0 而不是 "" 然后
像这样设置单元格的数字格式,您必须在其中提出您想要的正数和负数(前两项以分号分隔)。就我而言,我拥有的数字是 0、1、2……我希望 0 显示为空。 (我从来没有弄清楚 text 参数的用途,但它似乎是必需的)。 0;0;"";"文本"@
这就是我对我正在使用的数据集所做的。这看起来既复杂又愚蠢,但它是学习如何使用上述 VB 解决方案的唯一选择。
我对所有数据进行了“复制”,并将数据粘贴为“值”。然后我突出显示粘贴的数据并用一些字母“替换”(Ctrl-H)空单元格,我选择了 q 因为它不在我的数据表上的任何位置。最后,我又做了一次“替换”,将 q 替换为空。
这三步过程将所有“空”单元格变为“空白”单元格。我尝试通过简单地将空白单元格替换为空白单元格来合并步骤 2 和 3,但这不起作用——我不得不替换带有某种实际文本的空白单元格,然后用空白单元格替换该文本。
在 IF
语句中使用 COUNTBLANK(B1)>0
而不是 ISBLANK(B1)
。
与 ISBLANK()
不同,COUNTBLANK()
将 ""
视为空并返回 1。
尝试使用 LEN
评估单元格。如果它包含公式 LEN
将返回 0
。如果它包含文本,它将返回大于 0
。
""
或为空。 LEN(cell)>0
如果有数字(包括零,如果数字是通过公式计算的,则包括)返回 true,如果为空字符串或空则返回 false。
哇,很多人误读了这个问题。使单元格看起来是空的很容易。问题是,如果您需要单元格为空,Excel 公式不能返回“无值”,而只能返回一个值。返回零、空格甚至 "" 都是一个值。
因此,您必须返回一个“神奇值”,然后使用搜索和替换或使用 VBA 脚本将其替换为无值。虽然您可以使用空格或“”,但我的建议是使用明显的值,例如“NODATE”或“NONUMBER”或“XXXXX”,以便您可以轻松查看它出现的位置 - 很难找到“”在电子表格中。
如此多的答案返回一个看起来为空但实际上不是空单元格的值...
根据要求,如果您确实想要一个返回空单元格的公式。通过 VBA 是可能的。所以,这里是完全做到这一点的代码。首先编写一个公式以在您希望单元格为空的任何位置返回 #N/A 错误。然后我的解决方案会自动清除所有包含该 #N/A 错误的单元格。当然,您可以修改代码以根据您喜欢的任何内容自动删除单元格的内容。
打开“visual basic viewer”(Alt + F11)在项目资源管理器中找到感兴趣的工作簿并双击它(或右键单击并选择查看代码)。这将打开“查看代码”窗口。在(General)下拉菜单中选择“Workbook”,在(Declarations)下拉菜单中选择“SheetCalculate”。
将以下代码(基于 JT 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 错误将保持未删除状态
这个答案并没有完全处理 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 看起来更干净:
当你进行任何计算时,“”会给你错误,所以你想把它当作一个数字,所以我使用嵌套的 if 语句返回 0 而不是“”,然后如果结果为 0,这个等式将返回“”
=IF((IF(A5="",0,A5)+IF(B5="",0,B5)) = 0, "",(IF(A5="",0,A5)+IF(B5="",0,B5)))
这样excel表格看起来很干净......
如果您使用 HLOOKUP 和 VLOOKUP 等查找函数将数据带入工作表,请将函数放在括号内,该函数将返回一个空单元格而不是 {0}。例如,
如果查找单元格为空,这将返回零值:
=HLOOKUP("Lookup Value",Array,ROW,FALSE)
如果查找单元格为空,这将返回一个空单元格:
=(HLOOKUP("Lookup Value",Array,ROW,FALSE))
我不知道这是否适用于其他功能......我没有尝试过。我正在使用 Excel 2007 来实现这一点。
编辑
要真正使 IF(A1="", , ) 返回为真,需要在同一个单元格中进行两次查找,并用 & 分隔。解决此问题的简单方法是使第二次查找位于行尾且始终为空的单元格。
到目前为止,这是我能想到的最好的。
它使用 ISBLANK
函数在 IF
语句中检查单元格是否真的为空。如果单元格中有任何内容,在此示例中为 A1
,即使是空格字符 ,则单元格不是
EMPTY
,并且将产生计算结果。这将防止显示计算错误,直到您有数字可以使用。
如果单元格为 EMPTY
,则计算单元格将不会显示计算错误。如果单元格为 NOT EMPTY
,则将显示计算结果。如果您的数据不正确,这将引发错误,可怕的 #DIV/0
!
=IF(ISBLANK(A1)," ",STDEV(B5:B14))
根据需要更改单元格引用和公式。
答案是肯定的 - 您不能使用 =IF() 函数并将单元格留空。 “看起来是空的”不等于空。遗憾的是,背靠背的两个引号不会在不清除公式的情况下产生空单元格。
我去掉了单引号,因此 +1-800-123-4567 这样的电话号码列不会导致计算并产生负数。我尝试了一个 hack 来删除空单元格上的它们,禁止引用,然后也遇到了这个问题(F 列)。在源单元格上调用文本要容易得多,瞧!:
=IF(F2="'","",TEXT(F2,""))
这可以在 Excel 中完成,而无需使用将 #N/A 设置为间隙的新图表功能。但这很繁琐。假设您想在 XY 图表上画线。然后: 第 1 行:第 1 行 第 2 行:第 2 行 第 3 行:硬空 第 4 行:第 2 行 第 5 行:第 3 点 第 6 行:硬空 第 7 行:第 3 行 第 8 行:第 4 行 第 9 行:硬空等
结果是很多单独的行。点数的公式可以控制是否被#N/A 省略。通常将 INDEX() 点的公式放入另一个范围。
谷歌给我带来了一个非常相似的问题,我终于找到了一个适合我需要的解决方案,它也可能对其他人有所帮助......
我使用了这个公式:
=IFERROR(MID(Q2, FIND("{",Q2), FIND("}",Q2) - FIND("{",Q2) + 1), "")
不定期副业成功案例分享