vba - 如果 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 语句的情况下运行)
谢谢!
解决方案
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
所有错误并强制它继续,因此可能出现的错误将被忽略。
推荐阅读
- python - 尝试使用计数器检查值是否在范围内
- azure-resource-manager - Azure ARM 模板 - 将 virtualMachines/extensions 与 CopyIndex 一起使用
- twitter - 如何获取喜欢我的推文的用户列表和引用转发我的推文的用户列表?
- kubernetes - Kubernetes:如果我们已经有了 HPA,那么资源限制有什么用?
- mysql - 有没有办法使用合并语句将此查询转换为 Oracle 查询?
- c# - 在无法覆盖触发方法的情况下并行运行方法
- qt - 我可以使用正则表达式从句子中提取两个单词吗?
- git - 将文件从主目录移动到分支,然后从主目录中删除
- flutter - 我尝试使用 flutter_bloc 检查列表中是否有一个数字,但列表正在更改但它没有在听
- c - 如何纠正我的合并排序实现中的错误