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"
}

これが私が試したことです。いくつかの可能性のあるロジックの問題は言うまでもなく、少なくとも1つの構文エラーがあります。数式を書いているときにさまざまな方法で数式をフォーマットしようとしましたが、括弧で迷子になり続け、何がどこにあるのかわかりません。

=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 に答える