0

excel公式中缺乏清晰的格式让我很难做到这一点。

我需要编写一个公式:

  • 检查J2是否为“否”
  • 如果不是,请将值设置为“N/A”
  • 如果是这样,请根据给定日期检查 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 脚本会更好吗?
4

1 回答 1

2

这是根据您的描述的公式:

=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")

或者,如果您愿意,可以使用此 UDF:

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

然后像这样在任何单元格中调用它:=formulasMakeMyHeadHurt(J2,E2,G2,K2,DATE(2014,4,10))

于 2014-04-22T08:26:15.517 回答