web-dev-qa-db-fra.com

Plusieurs instructions IF: formule IF, AND, ISDATE, THEN

J'essaie de faire fonctionner une formule imbriquée, mais je continue à avoir une erreur. J'ai essayé d'utiliser la formule générique =IF(AND(A1="this",B1="that"),"x","") mais je n'ai pas trouvé comment m'assurer que Q6 = date. Un autre critique m'a écrit un code pour formater conditionnellement une cellule avec des critères similaires. Cela a donc fonctionné et je me suis dit que je pouvais l'utiliser pour cette situation. Malheureusement, ça ne marche pas. Quelqu'un peut-il bien vouloir m'aider à comprendre ce que j'ai mal fait?

Si ces deux conditions sont remplies:

  • P6 = "fermé"

ET

  • Q6 = date

Ensuite:

  • Q6-P6 (soustraire)
  • sinon, laisser en blanc

EDIT: ajout de cette deuxième condition: toute erreur ou valeur négative résultant devient "NA". Je pense que ce sera une sorte de déclaration imbriquée?

IF: nombre négatif ou erreur (#VALUE!)

THEN: "NA"


Les formules que j'ai essayées:

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

ET

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

ET

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


Solution n ° 1

Je l'ai compris! Était une solution simple; il suffit de définir la deuxième condition comme une date inférieure à celle d'aujourd'hui.

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

MAIS maintenant si j'obtiens un nombre négatif (car la colonne B n'a pas de date de début), comment puis-je faire en sorte que cette formule retourne "NA?"

J'ai essayé cette formule (j'ai une erreur):

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

Suis-je sur la bonne voie? Est-ce que cela échoue parce que si elle est erronée/si elle est négative, elle est circulaire (c'est le résultat de la première partie de la formule en cours d'exécution)? J'ai eu la valeur négative à disparaître en utilisant la mise en forme conditionnelle et en faisant la police de texte en blanc (merci, @ user0!)

La pièce d'erreur doit-elle être écrite comme un tableau/une erreur? le code IFERROR me confond complètement. J'ai essayé ces derniers mais j'ai toujours 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")

Solution n ° 2

Sensationnel. Je me sens bien accompli. Beaucoup d'essais et d'erreurs, mais cette formule semble fonctionner dans tous les cas. Donne-moi le nombre Q6-B6, NA s'il y a une erreur, et vide si les conditions ne sont pas remplies (les valeurs négatives que j'ai utilisées pour masquer la mise en forme conditionnelle).

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

1
que syrah sarah

Solution n ° 1

Je pense que je l'ai compris! Je viens de fixer à la deuxième condition une date inférieure à celle d’aujourd’hui (les dates de la colonne Q étant la date de fermeture, il s’agit de dates antérieures). J'ai modifié la formule générique IF-AND:

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

Solution n ° 2

Pour les valeurs négatives, j'ai utilisé la mise en forme conditionnelle et rendu le texte en blanc (le crédit revient à @ user0, qui m'a aidé avec un autre problème et a utilisé cette astuce ingénieuse)

Pour les erreurs, j'ai utilisé une formule de piège d'erreur (également grâce à @ user0). Il a fallu un peu de peaufinage et beaucoup d'essais et d'erreurs, mais j'ai finalement réussi à le faire fonctionner! :)

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

1
que syrah sarah

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

peut être légèrement amélioré pour:

=IFERROR(
         IF(
            AND(P6 = "closed"; 
                Q6 < "NOW()"); 
                               IF((Q6-B6) < 0; 
                                               ""; 
                                               Q6-B6); 
                               ""); 
         "NA")
  • NOW() est utilisé pour davantage de précision (si nécessaire), car il peut inclure l'heure déjà passée de la journée.
  • et 2nd IF() est capable de détecter et de capturer des valeurs négatives, il n’est donc pas nécessaire de recourir au formatage conditionnel.

solution finale pour OP:

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