web-dev-qa-db-ja.com

複数のIFステートメント:IF、AND、ISDATE、THEN式

ネストされた数式を機能させようとしていますが、エラーが発生し続けます。一般的な式=IF(AND(A1="this",B1="that"),"x","")を使用しようとしましたが、Q6 = dateを確認する方法がわかりませんでした。別のレビュアーに、同様の基準でセルを条件付きでフォーマットするためのコードを書いてもらい、それが機能するので、この状況で使用できると考えました。残念ながら、機能しません。誰かが親切に私が間違ったことを理解するのを助けることができますか?

これらの条件が両方とも満たされる場合:

  • P6 =「クローズ」

そして

  • Q6 =日付

次に:

  • Q6-P6(減算)
  • それ以外の場合は、空白のままにします

編集:この2番目の条件を追加:エラーまたは負の値が結果として "NA"になる。何らかのネストされたステートメントになると思う?

IF:負の数またはエラー(#VALUE!)

THEN: "NA"


私が試した式:

=IF( AND(ISDATE(Q6), COUNTIFS(P6, "closed", Q6, ">"&DATE(0,1,1)), "Q6-B6", ""))

そして

=IF(AND(P6="closed", Q6">"&DATE( 0,1,1), Q6-B6, ""))

そして

=IF(AND(P6= “closed”, ISDATE(Q6 ">"&DATE(0,1,1))), Q6-B6, "")


解決策#1

私はそれを考え出した!簡単な修正でした。今日より前の日付として2番目の条件を設定するだけです。

=IF(AND(P6="closed", Q6<"Today()"), Q6-B6, "")

ただし、負の数を取得した場合(列Bに開始日がないため)、この式で "NA?"を返すようにするにはどうすればよいですか

私はこの式を試してみました(エラーを見つけました):

=IF(AND(P6="closed", Q6<"Today()", Q6-B6, ""), IF(R6<0, "NA", IF(R6="VALUE!", "NA", "NA")))

私は正しい軌道に乗っていますか?これが失敗するのは、エラー/負の場合は循環的であるためです(実行中の式の最初の部分の結果)。条件付き書式を使用し、テキストフォントを白にすることで負の値が消えました(ありがとう、@ user0!)

エラーピースは配列/エラートラップとして書かれるべきですか? IFERRORコードは完全に混乱させます。これらを試してみましたが、Formula parse error

=iferror(ArrayFormula(IF(AND(P6="closed")*(Q6<"Today()"),Q6-B6), "NA”))

=iferror(ArrayFormula(IF(AND(P6="closed")*( Q6<"Today()"),Q6-B6, “”),1)

=iferror(ArrayFormula(IF(AND(P6="closed")*( Q6<"Today()"),Q6-B6, “”),1,"NA")

解決策2

ワオ。私はかなり達成されたと感じています。多くの試行錯誤がありますが、この式はすべてのケースで機能するようです。エラーがある場合はカウントQ6-B6、NA、条件が満たされない場合は空白(非表示に条件付き書式設定を使用した負の値)を提供します。

=IFERROR(IF(AND(P6="closed", Q6<"Today()"), Q6-B6, ""), "NA")

1
que syrah sarah

解決策#1

私はそれを理解したと思います! 2番目の条件を今日よりも小さい日付に設定しただけです(列Qの日付は閉鎖日になるため、過去の日付です)。一般的なIF-AND式を変更しました。

=IF(AND(P6="closed", Q6<"Today()"), Q6-B6, "")

解決策2

負の値については、条件付き書式を使用し、テキストを白にしました(クレジットは@ user0に割り当てられ、別の問題を解決してこの巧妙なトリックを使用しました)

エラーについては、エラートラップ式を使用しました(@ user0にも感謝します)。少し手を加えて多くの試行錯誤を繰り返しましたが、ようやくうまくいきました!! :)

=IFERROR(IF(AND(P6="closed", Q6<"Today()"), Q6-B6, ""), "NA")

1
que syrah sarah

=IFERROR(IF(AND(P6="closed", Q6<"Today()"), Q6-B6, ""), "NA")

わずかに改善することができます:

=IFERROR(
         IF(
            AND(P6 = "closed"; 
                Q6 < "NOW()"); 
                               IF((Q6-B6) < 0; 
                                               ""; 
                                               Q6-B6); 
                               ""); 
         "NA")
  • ここでNOW()は、必要に応じてより正確にするためのものです。これは、今日の日のすでに経過した時間を含めることができるためです。
  • 2番目のIF()は負の値を検出してキャプチャできるため、条件付き書式設定の必要はありません

OPの最終解:

=IFERROR(IF(P6="never opened", "",
         IF(B6="", "", 
         IF(AND(P6="closed", Q6<"NOW()"), Q6-B6, TODAY()-B6))),)
1
user0