感谢您查看我的问题。知道我是stackoverflow和VBA的新手,我有一个很长的宏,我一直在努力。在宏观中的某一点,我必须转换"开始深度" (L)和" End Depth" (M)来自" m"到" ft"。然后我减去两个以找到"画面" (N)。但是,列中的某些值最初保留为空白。所以,在进行了我的转换和减法后,我离开了" #VALUE!"这是后来在宏中给我的错误。最初我在转换和减法之前将所有空白更改为0。但是,在"完成"宏我觉得零正在搞乱呈现数据。所以,我只想进行转换和减法,然后更改所有" #VALUES!"回到空白。我在这上面找到了一些东西,但是我(我知道)对我使用或具体的任何东西: http://www.ozgrid.com/forum/showthread.php?t=60740和https://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)
感谢任何帮助。谢谢你们!
答案 0 :(得分:5)
这取决于是从公式还是从VBA代码生成#VALUE!
。
如果它是从公式生成的,请将公式包装在IFERROR函数中。我相信这是在Excel 2007中添加的。例如,如果你的公式是:
=A1-B1
然后你可以把
=IFERROR(A1-B1,"")
这就是说,如果A1-B1是错误,则返回“”,否则返回A1-B1的结果。
如果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
函数的第二个循环。