下午好,
我正在编写执行以下操作的代码:找到“ x”列,然后找到“ y”列,然后在“ z”列中求x和y之差。
换句话说,Z1中的单元格为:X1-Y1,依此类推。
现在,x和y列并不总是值,但也有日期和空单元格。我想通过使用on error resume next
来解决日期和字符串问题,因此代码只是跳过了它。
但是我找不到处理空白单元格的方法。我尝试使用if isblank(cell) = true then resume next
使用今天的代码,如果vba在x和y中找到一个空白单元格,则只需取0到0之间的差,因此在z列中将显示0,而不会。
代码中给我带来问题的部分是:
For z = 1 To lastrow
For j = rownum + 1 To finalrow
On Error Resume Next
ws.Cells(j, lastcol + 2 + z).Value = ws.Cells(j, acol).Value - ws.Cells(j, colnum + z - 1).Value
ws.Cells(j, lastcol + 2 + z).NumberFormat = "0.0"
Next j
Next z
我需要代码首先查看x或y列中是否有空白单元格。如果是这种情况,请转到下一个迭代。
我试图写这样的东西,但这给了我错误:
For z = 1 To lastrow
For j = rownum + 1 To finalrow
On Error Resume Next
if isblank(ws.Cells(j, lastcol + 2 + z).Value)=true then resume next
ws.Cells(j, lastcol + 2 + z).Value = ws.Cells(j, acol).Value - ws.Cells(j, colnum + z - 1).Value
ws.Cells(j, lastcol + 2 + z).NumberFormat = "0.0"
Next j
Next z
end if
变量设置良好,代码可以正常运行(如果在没有isblank语句的情况下运行)
谢谢!
答案 0 :(得分:1)
您可以尝试以下方法:
For z = 1 To lastrow
For j = rownum + 1 To finalrow
if ws.Cells(j, acol).Value = "" or ws.Cells(j, colnum + z - 1).Value = "" then
'One or more Cells are null
else
ws.Cells(j, lastcol + 2 + z).Value = ws.Cells(j, acol).Value - ws.Cells(j, colnum + z - 1).Value
ws.Cells(j, lastcol + 2 + z).NumberFormat = "0.0"
end if
Next j
Next z
答案 1 :(得分:1)
IsBlank()
在VBA中不存在。这是一个Excel函数。但是,有很多方法可以检查范围是否为空白。一种可能的方法是Trim()
范围,并查看其是否等于""
:
For z = 1 To lastRow
For j = rownum + 1 To finalrow
If Trim(ws.Cells(j, lastcol + 2 + z)) = "" Or _
Not IsNumeric(ws.Cells(j, lastcol + 2 + z)) Then
ws.Cells(j, lastcol + 2 + z) = ws.Cells(j, acol) - ws.Cells(j, colnum + z - 1)
ws.Cells(j, lastcol + 2 + z).NumberFormat = "0.0"
End If
Next j
Next z
作为VBA的经验法则,每当您想编写On Error Resume Next
时,很可能有一种更好的方法来避免编写整篇文章。 On Error Resume Next
会忽略代码中的所有错误并强制其继续执行,因此会忽略可能出现的错误。