检查两个单元格是否为空

时间:2016-06-29 19:28:12

标签: excel vba excel-vba

我试图查看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

这是最好的方法吗?

3 个答案:

答案 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

它可能看起来不干净,但如果肯定有益处。