我试图查看VBA中两个单元格是否 NOT 为空。我使用IsEmpty()
,但我不认为我正确使用它们。这就是我所拥有的。它不起作用,因为它总是会进入if语句。
在if
内,我操纵了一些细胞。如果我进入其他地方,我不应该操纵它们。(什么都不做),但它们最终也会改变。
For i = 2 To rows
If ((Not IsEmpty(Cells(i, 4))) And (Not IsEmpty(Cells(i, 5)))) Then
'Do stuff...
else
'Do nothing...
end if
next i
这是最好的方法吗?
答案 0 :(得分:1)
这些都是有效的
如果((不是IsEmpty(Cells(i,4)))和(Not IsEmpty(Cells(i,5))))那么
如果细胞(i,4)<> ""和细胞(i,5)<> ""然后
如果Len(Cells(i,4))和Len(Cells(i,5))那么
如果Len(Cells(i,4))> 0和Len(Cells(i,5))> 0然后
我个人的偏好是使用Len()。我觉得它看起来很整洁
将代码包装在with语句中可以更轻松地比较不同工作表上的范围。
With managerSheet
For i = 2 To rows
If Len(.Cells(i, 4)) And Len(.Cells(i, 5) Then
'Do stuff...
else
'Do nothing...
end if
next i
End With
答案 1 :(得分:0)
我的问题不是我的if语句,而是我的调用范围。
我忘了包括细胞的范围。 managerSheet.Cells(i, 4).. etc
谢谢你的帮助
答案 2 :(得分:0)
我通常采用的方法是检查引用的单元格。据我所知,当你引用一个单元格时,解释器将返回一个最适合该值的类型,即1
返回Double
,"abc"
返回{{1} }} 等等。当单元格为空时,返回的类型为String
。
我使用提到的here技术进行了性能测试。
测试1:使用Empty
比较细胞需要40.9080069854244
Len()
测试2:将单元格与类型dTime = MicroTimer
For i = 1 To 10000
If Len(Cells(i, 4)) And Len(Cells(i, 5)) Then
'Do something
Else
'Do nothing
End If
Next i
dTime = MicroTimer - dTime '40.9080069854244
进行比较仅花费21.0493610010926
Empty
它可能看起来不干净,但如果肯定有益处。