如果isblank(cell)然后恢复下一个VBA

时间:2018-06-25 13:18:44

标签: excel vba excel-vba

下午好,

我正在编写执行以下操作的代码:找到“ 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语句的情况下运行)

谢谢!

2 个答案:

答案 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会忽略代码中的所有错误并强制其继续执行,因此会忽略可能出现的错误。