如何在Excel VBA中使用OR和空单元格制作IF语句

3
我正在尝试在VBA脚本中创建一个IF语句。最终目的是在满足IF语句条件时,将内容从一个工作表(“Database”)复制到另一个工作表(“Search”)。
脚本首先通过定义变量(“country”,“category”)来依赖于“Search”工作表的单元格“E5”和“E7”中的用户输入。它还定义了IF语句运行的最终行:
country = Sheets("Search").Range("E5").Value
category = Sheets("Search").Range("E7").Value
finalrow = Sheets("Database").Range("A200000").End(xlUp).Row

接下来,脚本会设定一个条件:如果在“数据库”表格的单元格中找到与“国家”和“类别”单元格中输入值匹配的内容,则将该表格上的值复制到“搜索”表格上:

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

我想在IF语句中添加一个OR语句的附加条件。我想让它这样做:如果用户没有填写“category”单元格,则仍然将值从一个工作表复制到另一个工作表。就代码而言,我已经添加了**之间的部分,但它没有起作用:

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

除此之外,一切都很顺利。 你有任何想法,我可能做错了什么吗? 谢谢!

4
为什么要检查 category 是否等于一个空白字符?你的意思是指 Or category = ""(即,category 等于空字符串)吗? - FDavidov
1
另外,ANDOR 拥有不同的优先级,所以最好使用括号来强制指定检查发生的特定顺序。 - FDavidov
是的,那就是我想说的。对此很抱歉。 - franciscofcosta
1
可能还希望执行 Trim(category)="" - David Zemens
2
请使用括号进行修订。If A And (B Or C)If (A And B) Or C 之间可能存在差异。 - David Zemens
显示剩余3条评论
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接