首页 > 解决方案 > 如果 isblank(cell) 则继续下一个 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 OR 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 语句的情况下运行)

谢谢!

标签: vbaexcel

解决方案


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所有错误并强制它继续,因此可能出现的错误将被忽略。


推荐阅读