如何使用OR和Excel VBA中的空单元格生成IF语句

时间:2016-11-17 14:58:03

标签: excel vba excel-vba if-statement

我正在尝试在VBA脚本中创建IF语句。它最终想要达到的目的是在满足IF声明的情况下,将内容从一张表("数据库")复制到另一张表(" Search")。

该脚本首先定义变量(" country"," category"),这取决于用户对单元格的输入" E5"和" E7" "搜索"片。它还定义了If语句的最后一行,直到该行:

country = Sheets("Search").Range("E5").Value
category = Sheets("Search").Range("E7").Value
finalrow = Sheets("Database").Range("A200000").End(xlUp).Row

在此之后,脚本建立条件:如果输入的值(在单元格" country"" category"中)与"的单元格上的内容匹配。数据库"表格,然后应将此表格上的值复制到"搜索"片:

For i = 2 To finalrow
    If Sheets("Database").Cells(i, 1) = country And _
    Sheets("Database").Cells(i, 3) = category Then
      With Sheets("Database")
        .Range(.Cells(i, 1), .Cells(i, 9)).Copy
      End With
      Sheets("Search").Range("B600").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats            
    End If                   
Next I

我想使用OR语句向IF语句添加一个附加条件。我想这样做,如果用户没有填写"类别"单元格,值仍然从一个工作表复制到另一个工作表。在代码方面,我在**之间添加了部分,但它不起作用:

For i = 2 To finalrow
    If Sheets("Database").Cells(i, 1) = country And _
    Sheets("Database").Cells(i, 3) = category **Or category = ""** Then
      With Sheets("Database")
        .Range(.Cells(i, 1), .Cells(i, 9)).Copy
      End With
      Sheets("Search").Range("B600").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats           
    End If                   
Next i

除此之外,一切都很顺利。 你知道我可能做错了什么吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

如果它给你带来问题,我会完全避开Or。在" "中放置一个空格实际上是在寻找空格作为值,如果你的意思是使用空格""IsEmpty(Category)

For i = 2 To finalrow
    If Category = "" Then

        If Sheets("Database").Cells(i, 1) = country Then

            With Sheets("Database")
            .Range(.Cells(i, 1), .Cells(i, 9)).Copy
        End With
             Sheets("Search").Range("B600").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats

        End If

    Else

        If Sheets("Database").Cells(i, 1) = country And _
        Sheets("Database").Cells(i, 3) = Category Then

            With Sheets("Database")
            .Range(.Cells(i, 1), .Cells(i, 9)).Copy
        End With
             Sheets("Search").Range("B600").End(xlUp).Offset(1, 0).PasteSpecial xlPasteFormulasAndNumberFormats

        End If

Next i