Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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中嵌套IF、AND或_Excel_Vba_Logical Operators_Formulas_Nested If - Fatal编程技术网

如何在excel中嵌套IF、AND或

如何在excel中嵌套IF、AND或,excel,vba,logical-operators,formulas,nested-if,Excel,Vba,Logical Operators,Formulas,Nested If,excel公式中缺少清晰的格式,这让我很难做到 我需要写一个公式,它将: 检查J2是否为“否” 如果不是,则将值设置为“不适用” 如果是,请对照给定日期检查E2中的日期 如果在给定日期之后,将值设置为“通过” 如果在给定日期之前,检查G2是否为“取消”,K2是否为“否”,或者G2是否为“无效”,K2是否为“是” 如果为true,则将值设置为“失败” 如果为false,则将值设置为“通过” 如果我使用Javascript,它可能看起来像这样: function formulasMakeMyHe

excel公式中缺少清晰的格式,这让我很难做到

我需要写一个公式,它将:

  • 检查J2是否为“否”
  • 如果不是,则将值设置为“不适用”
  • 如果是,请对照给定日期检查E2中的日期
  • 如果在给定日期之后,将值设置为“通过”
  • 如果在给定日期之前,检查G2是否为“取消”,K2是否为“否”,或者G2是否为“无效”,K2是否为“是”
  • 如果为true,则将值设置为“失败”
  • 如果为false,则将值设置为“通过”
如果我使用Javascript,它可能看起来像这样:

function formulasMakeMyHeadHurt(J2,E2,G2,K2,givenDate){

    if(J2=="No"){
        if(E2>givenDate){
            if((G2=="Cancel"&&K2!="No")||(G2=="Void"!="Yes")){
                return "Fail"
            }
            else return "Pass"
        }
        else return "Pass"
    }
    else return "N/A"
}
这是我尝试过的,至少有一个语法错误,更不用说一些可能的逻辑问题了。我在写公式的时候尝试过用不同的方式格式化公式,但是我总是在括号里迷路,弄不清楚什么会用到哪里

=IF( ISNUMBER(SEARCH(J20,"No"))
           , IF($E20>=DATE(2014,4,10))
               ,"Pass"
           , IF(      OR(   ISNUMBER(FIND("Void",G20))    ,   AND(ISNUMBER(FIND("Cancel",G20)), ISERROR(SEARCH("No",K20)))    )    )
                          ,"Pass"
            ,"Fail")
                )
,"N/A")
相同的公式,不带间距,如果您的眼睛更容易看到的话:

=IF( ISNUMBER(SEARCH(J20,"No")),IF($E20>=DATE(2014,4,10)),"Pass", IF(OR(ISNUMBER(FIND("Void",G20)),AND(ISNUMBER(FIND("Cancel",G20)),ISERROR(SEARCH("No",K20))))),"Pass","Fail")),"N/A")
  • 这个公式应该怎么写?
  • 使用VBA脚本是否更好?

    • 根据您的描述,以下是公式:

      =IF(ISNUMBER(SEARCH("No",J2)),IF(E2>=DATE(2014,4,10),"Pass",IF(OR(AND(ISNUMBER(SEARCH("Cancel",G2)),ISNUMBER(SEARCH("No",K2))),AND(ISNUMBER(SEARCH("Void",G2)),ISNUMBER(SEARCH("Yes",K2)))),"Fail","Pass")),"N/A")
      
      或者,如果您愿意,可以使用此自定义项:

      Function formulasMakeMyHeadHurt(J2 As String, E2 As String, _
                                  G2 As String, K2 As String, _
                                  givenDate As Date) As String
          Dim res As String
      
          If J2 Like "*No*" Then
              If CDate(E2) >= givenDate Then
                  If (G2 Like "*Cancel*" And K2 Like "*No*") Or _
                      (G2 Like "*Void*" And K2 Like "*Yes*") Then
                      res = "Fail"
                  Else
                      res = "Pass"
                  End If
              Else
                  res = "Pass"
              End If
          Else
              res = "N/A"
          End If
      
          formulasMakeMyHeadHurt = res
      End Function
      

      然后在这样的任何单元格中调用它:
      =公式makemyheadhart(J2,E2,G2,K2,DATE(2014,4,10))
      SEARCH(J20,“No”)
      -检查
      J20
      是否包含
      “No”
      。您想检查它是否为euqal
      “否”
      ?在我的情况下,contains对我来说很好,公式中的最后一个“Fail”“Pass”是向后的(可能是由于我的解释),语法完全正确,谢谢!我喜欢更容易理解的UDF!对于这样的公式,我也更喜欢UDF,因为它更容易维护+1。此外,您可以返回实际错误“#N/A”值(如果需要)
      res=cverr(2042)
      ,而不是
      res=“N/A”