如果错误然后空白

时间:2014-09-26 19:01:44

标签: excel vba excel-vba

感谢您查看我的问题。知道我是stackoverflow和VBA的新手,我有一个很长的宏,我一直在努力。在宏观中的某一点,我必须转换"开始深度" (L)和" End Depth" (M)来自" m"到" ft"。然后我减去两个以找到"画面" (N)。但是,列中的某些值最初保留为空白。所以,在进行了我的转换和减法后,我离开了" #VALUE!"这是后来在宏中给我的错误。最初我在转换和减法之前将所有空白更改为0。但是,在"完成"宏我觉得零正在搞乱呈现数据。所以,我只想进行转换和减法,然后更改所有" #VALUES!"回到空白。我在这上面找到了一些东西,但是我(我知道)对我使用或具体的任何东西: http://www.ozgrid.com/forum/showthread.php?t=60740https://superuser.com/questions/715744/excel-2010-formula-how-do-i-write-this-formula-vba

以下是我用来将空白变成0&#39>的内容

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

以下是导致错误的代码。注意:数据以空格开头,使用这些公式后,我会收到错误,因为一些原始单元格以null或空格开头。此外,这些行不按此顺序排列,但它们是留下错误的行。

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)

感谢任何帮助。谢谢你们!

3 个答案:

答案 0 :(得分:5)

这取决于是从公式还是从VBA代码生成#VALUE!

如果它是从公式生成的,请将公式包装在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

然后通过它传递你的价值。

答案 1 :(得分:0)

这并不能直接回答您的问题,但确实会在您的工作表上修复Zero的呈现方式。您可以使用以下设置通过VBA将零显示为空白:ActiveWindow.DisplayZeros = False这可能是一个考虑因素,而不是循环遍历所有寻找0并且手动将它们切换为空白的内容。

答案 2 :(得分: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

对不起,我没有机会对它进行测试,但试一试。 最重要的是,我只是包含了一个在数据上运行IFERROR函数的第二个循环。