如果错误然后空白

感谢您看看我的问题。 知道我是新来的stackoverflow和VBA我有一个长期的macros,我一直在努力。 在macros的一个点上,我必须将“开始深度”(L)和“结束深度”(M)从“m”转换为“ft”。 然后我减去两个find“素材”(N)。 但是,列中的某些值最初留空。 所以,在做了我的转换和减法之后,我剩下了“#VALUE!” 这在macros观上给我错误。 原来我在转换和减法之前把所有的空白都改成了0。 但是,在“完成”这个macros之后,我意识到这些零是在提交数据时搞乱了。 所以,我想只做转换和减法,然后改变所有的“#VALUES!” 回到空白。 我发现了一些东西,但没有我可以(我知道)使用或特定于我: http : //www.ozgrid.com/forum/showthread.php ?t= 60740和https://superuser.com /问题/ 715744 / EXCEL-2010-配方怎么办-我-写这个配方,VBA

这是我用来改变空白为0的

Worksheet1.Select lastrow = Range("A666666").End(xlUp).Row For Each cell In Range("A1:Q" & lastrow) If Len(cell.Value) = 0 Then cell.Value = 0 End If Next 

这是导致错误的代码。 注意:数据以空格开始,在使用这些公式之后,我给出了错误,因为一些原始单元格开始为空或空格。 另外,这些行不是按这个顺序排列的,而是它们是留下错误的行。

 ActiveCell.FormulaR1C1 = "=CONVERT(RC[2],""m"",""ft"")" Selection.AutoFill Destination:=Range("N2:O2"), Type:=xlFillDefault Selection.AutoFill Destination:=Range("N2:O" & lastrow) Range("N1") = "Footage" Range("N2").Select ActiveCell.FormulaR1C1 = "=RC[-1]-RC[-2]" Selection.AutoFill Destination:=Range("N2:N" & lastrow) 

任何帮助表示赞赏。 多谢你们!

这取决于如果#VALUE! 正在从公式或VBA代码生成。

如果从公式生成,则将公式包装在IFERROR函数中。 我相信这是在Excel 2007中添加的。 例如,如果你的公式是:

 =A1-B1 

那你可以放

 =IFERROR(A1-B1,"") 

也就是说,如果A1-B1是错误,则返回“”,否则返回A1-B1的结果。

VBA

如果该值是由VBA生成的,则可以编写一个像IFERROR一样工作的辅助函数

 Public Function MyIfError(value As Variant, value_if_error As Variant) If IsError(value) Then MyIfError = value_if_error Else MyIfError = value End If End Function 

然后通过你的价值。

这并不能直接回答你的问题,但是它确实在你的工作表上修正了Zero的表示。 您可以使用以下设置通过VBA显示为空白的零: ActiveWindow.DisplayZeros = False这可能是一个考虑,而不是循环遍历所有寻找0和手动切换到空白。

 Worksheet1.Select lastrow = Range("A666666").End(xlUp).Row For Each cell In Range("A1:Q" & lastrow) If Len(cell.Value) = 0 Then cell.Value = 0 End If Next For Each cell In Range("A1:Q" & lastrow) cell.value = WorksheetFunction.Iferror(cell.value,"") End If Next 

对不起,我没有机会testing它,但试试看。 底线是,我只是简单地包括第二个循环,您的数据上运行IFERROR函数。