在Excel中从公式返回空单元格
我需要从Excel公式中返回一个空单元格,但是看起来Excel处理的空string或对空单元格的引用与真空单元格不同。 所以基本上我需要类似的东西
=IF(some_condition,EMPTY(),some_value)
我试图做的事情如
=IF(some_condition,"",some_value)
和
=IF(some_condition,,some_value)
并假设B1是一个空单元格
=IF(some_condition,B1,some_value)
但这些似乎都不是真正的空单元格,我猜是因为它们是公式的结果。 是否有任何方法来填充单元格当且仅当满足某些条件,否则保持单元格真空?
编辑:build议,我试图返回NA(),但为我的目的,这也没有工作。 有没有办法与VB做到这一点?
编辑:我正在build立一个工作表,从其他格式的工作表格拉到数据导入到数据库的应用程序的特定要求的数据。 我没有权限更改此应用程序的实现,如果值为“”而不是实际为空,则失败。
那么你将不得不使用VBA
。 您将遍历范围内的单元格,testing条件,并删除匹配的内容。
就像是:
For Each cell in SomeRange If (cell.value = SomeTest) Then cell.ClearContents Next
Excel没有办法做到这一点。
Excel中单元格中的公式的结果必须是数字,文本,逻辑(布尔)或错误。 没有公式单元格值types的“空白”或“空白”。
我所看到的一种做法是使用NA()和ISNA(),但是这可能会或可能不会真正解决您的问题,因为NA()被其他函数处理的方式存在很大的差异(SUM(NA ))是#N / A,而如果A1为空,则SUM(A1)为0)。
也许这是作弊,但它的作品!
我还需要一个表格,它是图表的来源,我不想要任何空白或零单元格在图表上产生一个点。 确实,您需要设置graphics属性,select数据,隐藏和空白单元格以将空单元格显示为间隙(单击单选button)。这是第一步。
然后在可能以不需要绘制的结果为单位的单元格中,将该公式放在一个带有NA()结果的IF语句中,例如= IF($ A8> TODAY(),NA(), 公式被绘制 )
当出现无效的单元格值时,这确实给出了没有点的所需graphics。 当然这会使所有具有该无效值的单元格读取“#N / A”,这很麻烦。
要进行清理,请select可能包含无效值的单元格,然后select“条件格式化” – 新规则。 select“仅格式包含的单元格”,并在规则描述下从下拉框中select“错误”。 然后在格式下selectfont – color – white(或任何你的背景颜色)。 点击各个button出来,你应该看到,具有无效数据的单元格看起来是空白的(它们实际上包含'#N / A',但白色背景上的白色文本看起来是空白的。)然后,链接graphics也不显示无效值点。
对的,这是可能的。
如果条件得到满足,可以有一个歼灭公式评估为trueblank。 它通过了ISBLANK公式的testing。 这个看似不可能的技巧可以通过几种不同的方式来完成。 这里是我最喜欢的FrankensTeam集合的例子。
您将可以使用例如:
=IF(A1="Hello world",GetTrueBlank,A1)
将GetTrueBlank
定义为命名范围之后 。
第1步。把这个代码放在Module中。
Function Delete_UDF(rng) ThisWorkbook.Application.Volatile rng.Value = "" End Function
关于VBA代码的两点评论 (1)不要误导rng.Value=""
命名的愤怒GetTrueBlank
将最终成为一个trueblank,而不是像双引号=""
的空string。 (2)在我的testing中,FrankensTeam最初使用的第一行代码ThisWorkbook.Application.Volatile
被certificate是不必要的。
步骤2.在A1
单元格的Sheet1
中,使用以下公式添加命名范围GetTrueBlank
:
=EVALUATE("Delete_UDF("&CELL("address",Sheet1!A1)&")")
第3步。使用自我消除公式。 把B2
放入单元格,如下公式:
=IF(A2=0,GetTrueBlank,A2)
如果在A2
input0, B2
的上述公式将计算为trueblank。
你可以在这里下载一个演示文件 。
在上面的例子和FrankensTeam的所有其他例子中,评估公式为trueblank会导致一个空单元格。 使用ISBLANK公式检查结果正确的结果为TRUE。 这些是哈拉 – 基里喜欢的公式。 当条件满足时,公式从单元中消失。 目标达成了,虽然问题的作者可能希望公式不要消失。
请注意,可能会修改这些示例以在相邻单元格中显示结果,而不会自行查杀。 但是,这是另一个问题,如何获得在不同的单元格的公式结果,然后公式本身。
我已经开始讨论这个问题了:FrankensTeam在这里得到了一个公式结果: https : //sites.google.com/site/e90e50/excel-formula-to-change-the-value-of-another-细胞
这是我为我使用的数据集做的。 这似乎令人费解和愚蠢,但它是学习如何使用上述VB解决scheme的唯一select。
- 我做了所有数据的“复制”,并将数据粘贴为“值”。
- 然后我突出显示了粘贴的数据,并用空格replace( Ctrl – H )空白单元格,我select了
q
因为它不在我的数据表中的任何位置。 - 最后,我又做了一个“replace”,把
q
换成了什么都没有。
这三步过程将所有“空”单元转换为“空单元”。我试图通过简单地用空白单元replace空单元来合并步骤2和3,但是这并不起作用 – 我必须replace空白单元格与某种实际的文本,然后用空白单元格replace该文本。
如果目标是能够显示一个单元格为空时,实际上它的值为零,而不是使用一个空白或空单元格的公式(因为没有empty()
函数),而是使用公式,
-
你想要一个空白单元格,返回一个
0
而不是""
然后 -
设置像这样的单元格的数字格式,你将不得不拿出你想要的正面和负面的数字(前两个项目用分号分隔)。 在我的情况下,我所拥有的数字是0,1,2 …而我想要0显示为空。 (我从来没有弄清楚是什么文本参数被用于,但它似乎是必需的)。
0;0;"";"text"@
在IF
语句中使用COUNTBLANK(B1)>0
而不是ISBLANK(B1)
。
与ISBLANK()
不同, COUNTBLANK()
认为""
为空,并返回1。
尝试使用LEN
评估单元格。 如果它包含一个公式LEN
将返回0
。 如果它包含文本,它将返回大于0
。
哇,很多人误解了这个问题。 使单元看起来很空很容易。 问题是如果您需要单元格为空,Excel公式不能返回“无值”,但只能返回一个值。 返回一个零,一个空格,甚至是“”是一个值。
所以你必须返回一个“魔术值”,然后使用search和replace或使用VBA脚本replace为无值的值。 虽然您可以使用空格或“”,但我的build议是使用明显的值,例如“NODATE”或“NONUMBER”或“XXXXX”,以便您可以轻松地看到它发生的位置 – 很难find“”在电子表格中。
这么多的答案,返回一个值,看看空,但实际上不是一个空的单元格作为请求…
根据要求,如果你真的想要一个公式返回一个空单元格。 有可能通过VBA。 所以,这里就是这样做的代码。 首先编写一个公式,在您希望单元格为空的任何位置返回#N / A错误。 然后我的解决scheme自动清除所有包含#N / A错误的单元格。 当然,您可以修改代码,根据您喜欢的任何内容自动删除单元格的内容。
打开“视觉基本查看器”(Alt + F11)在项目浏览器中find感兴趣的工作簿,并双击它(或右键单击并select查看代码)。 这将打开“查看代码”窗口。 在(General)下拉菜单中select“Workbook”,在(Declarations)下拉菜单中select“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
将您的文件保存为启用macros的工作簿
注意:这个过程就像一个手术刀。 它将删除评估为#N / A错误的所有单元的全部内容,请注意。 他们会去,你不能重新进入他们以前包含的公式没有回来。
NB2:显然你需要在打开文件的时候启用macros,否则它将不起作用,并且#N / A错误将不会被删除
我使用了下面的工作,使我的Excel看起来更清洁:
当你进行任何计算时,“”会给你错误,所以你想把它作为一个数字,所以我用嵌套的if语句返回0而不是“”,然后如果结果为0,这个方程将返回“”
=IF((IF(A5="",0,A5)+IF(B5="",0,B5)) = 0, "",(IF(A5="",0,A5)+IF(B5="",0,B5)))
这样的Excel表格将看起来干净…
这个答案没有完全处理OP,但是我也遇到过好几次类似的问题,并寻找答案。
如果您可以重新创build公式或数据(如果需要的话),然后当您准备好运行需要空白单元格的部分时,您可以select该区域,然后运行下面的vbamacros。
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
这将消除当前显示""
或只有一个公式的任何单元格的内容
如果您正在使用像HLOOKUP和VLOOKUP这样的查找函数将数据放入工作表,请将函数置于括号内,并且函数将返回空单元格而不是{0}。 例如,
如果查找单元格是空的,这将返回一个零值:
=HLOOKUP("Lookup Value",Array,ROW,FALSE)
如果查找单元格为空,这将返回一个空单元格:
=(HLOOKUP("Lookup Value",Array,ROW,FALSE))
我不知道这是否与其他function工作…我还没有尝试过。 我正在使用Excel 2007来实现这一点。
编辑
要真正得到一个IF(A1 =“”,,)返回为true,需要在同一个单元格中由两个查找进行两次查找。 简单的解决方法是使第二个查询位于行尾,并且总是空的。
那么到目前为止,这是我能想到的最好的。
它使用ISBLANK
函数来检查在IF
语句中单元是否真空。 如果单元格中有任何东西,在这个例子中,即使是一个SPACE字符, 那么该单元格不是
EMPTY
并且将导致计算。 这将保持显示计算错误,直到你有数字处理。
如果单元格为EMPTY
则计算单元格将不会显示计算中的错误。如果单元格NOT EMPTY
的,则会显示计算结果。 这会抛出一个错误,如果你的数据不好,可怕的#DIV/0
!
=IF(ISBLANK(A1)," ",STDEV(B5:B14))
根据需要更改单元格引用和公式。
答案是肯定的 – 你不能使用= IF()函数,并保持单元格为空。 “看起来空虚”是不一样的空洞。 这是一个耻辱两个引号背靠背没有删除公式没有产生一个空的单元格。
这似乎是一个简单的答案,作品已被错过。
在电子表格BlankCell
命名一个空单元格。
返回BlankCell
中的BlankCell
,例如
=ISBLANK(IFNA(VLOOKUP(A2,SomeTable,2,False),BlankCell))
如果ISBLANK(VLOOKUP(A2,SomeTable,2,False))
为TRUE
ISBLANK(VLOOKUP(A2,SomeTable,2,False))
这将返回TRUE
。
谷歌给我带来了一个非常类似的问题,我终于想出了一个适合我需求的解决scheme,也可能帮助别人…
我用这个公式:
=IFERROR(MID(Q2, FIND("{",Q2), FIND("}",Q2) - FIND("{",Q2) + 1), "")