Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Excel VBA中使用或和空单元格生成IF语句_Vba_Excel_If Statement - Fatal编程技术网

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

如何在Excel VBA中使用或和空单元格生成IF语句,vba,excel,if-statement,Vba,Excel,If Statement,我试图在VBA脚本中生成IF语句。它最终想要实现的是,在满足IF语句的情况下,将内容从一个工作表(“数据库”)复制到另一个工作表(“搜索”) 脚本首先根据用户在“搜索”表的“E5”和“E7”单元格中的输入定义变量(“国家”、“类别”)。它还定义了If语句要运行到该行的最后一行: country = Sheets("Search").Range("E5").Value category = Sheets("Search").Range("E7").Value finalrow = Sheets("

我试图在VBA脚本中生成IF语句。它最终想要实现的是,在满足IF语句的情况下,将内容从一个工作表(“数据库”)复制到另一个工作表(“搜索”)

脚本首先根据用户在“搜索”表的“E5”和“E7”单元格中的输入定义变量(“国家”、“类别”)。它还定义了If语句要运行到该行的最后一行:

country = Sheets("Search").Range("E5").Value
category = Sheets("Search").Range("E7").Value
finalrow = Sheets("Database").Range("A200000").End(xlUp).Row
在此之后,脚本建立条件:如果输入值(在“国家”和“类别”单元格中)与“数据库”工作表单元格中的内容匹配,则应将此工作表中的值复制到“搜索”工作表中:

我想用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
除此之外,一切都很顺利。 你知道我可能做错了什么吗?
谢谢大家!

如果它给你带来问题,我会完全避免使用
。另外,在
中放置空格“
实际上是将空格作为一个值来查找,如果您希望它为空,请使用
IsEmpty(Category)


为什么要检查
类别
是否等于一个空白字符?你的意思是
或category=”“
(意思是,category等于一个空字符串)?另外,
有不同的优先级,所以最好使用括号强制执行检查的特定顺序。是的,这就是我的意思。很抱歉,您可能还想做
Trim(category)==“
请用括号修改。如果a和(B或C)
如果(a和B)或C
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
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