Formule pour delta entre deux nombres

9

J'essaie de trouver le delta entre deux ensembles de nombres. Certains chiffres sont positifs, certains négatifs.

L'utilisation de la formule suivante fonctionne environ 99% du temps:

=IF(I18<0,I18+R18,IF(I18>0,I18-R18))

Cependant, lorsque I18et R18sont des nombres négatifs, j'ai besoin I18-R18. J'ai essayé plusieurs IF ANDdéclarations, mais je n'arrive tout simplement pas à comprendre cela. J'espère que quelqu'un pourra me guider dans la bonne direction.

Dave
la source
3
Vous avez oublié de dire ce qui devrait arriver si I18zéro.
Blackwood
3
"quand I18et R18sont des nombres négatifs, j'ai besoin I18-R18" Êtes-vous sûr de vouloir dire cela? Je pensais que tu voulais le delta comme une différence absolue. Si I18est -2et R18est -1, votre résultat sera -1. Vous ne voulez pas un nombre positif dans tous les cas?
JoL
Produit =ABS(I18)-ABS(R18)la sortie souhaitée?
Salman A
3
Votre question n'est vraiment pas claire. Je ne pouvais comprendre ce que tu cherchais que quand j'ai vu la réponse (et je ne suis toujours pas sûr que ce soit ce que tu veux). En outre, un delta entre A et B ne peut être que A+Bsi A et B sont tous deux nuls.
Dmitry Grigoryev
3
Le delta signifie généralement la différence entre deux nombres, qui est toujours A-B , et à moins que vous ne vouliez indiquer lequel des nombres est le plus grand, vous prendriez la valeur absolue abs (AB) .
Mick

Réponses:

55

On dirait que vous voulez juste la différence (delta) entre I18et R18, et vous voulez qu'elle soit toujours positive?

Cette formule fera cela:

=ABS(I18-R18)

Il donnera la bonne réponse, qu'elle I18soit positive, négative ou nulle.

Steve Kennedy
la source
3
Regardez comme les autres réponses sont compliquées! Rester simple!
Stewart
11
Pour être juste, la question demandait comment faire IF()correctement le travail imbriqué . Les autres réponses répondaient à la question posée. Mais parfois, prendre un chemin différent vous mènera plus rapidement au bon endroit.
Steve Kennedy
@Stewart Pour être plus juste, il n'est pas clair si OP veut la différence absolue. Les réponses de ToddCurry et PeterH cherchent à remplir une condition de l'ensemble OP qui ne conduit pas à la différence absolue.
JoL
@Stewart, la plupart des autres réponses sont fondamentalement les mêmes que celle-ci, sauf qu'elles développent la fonction ABS () dans des blocs conditionnels plus basiques. Mais rien de compliqué, vraiment.
cedbeu
1
@cedbeu Compliqué, définitivement. Ne serait-ce que parce que les autres réponses sont plus difficiles à lire et à analyser mentalement.
Stewart
6

Au lieu de vérifier la négativité des opérandes, vérifiez le résultat.

=IF(I18-R18>0,I18-R18,R18-I18)
JoL
la source
3
la condition pourrait également être remplacée parI18>R18
Liora Haydont
5

Simplifions votre code d'origine:

If X < 0:
    Z = X + Y

Else X > 0:
    Z = X - Y

Maintenant, vous dites que lorsque X <0 et Y <0, vous voulez réellement que le résultat soit X - Y et non X + Y. OK.

If Y < 0:
   If X < 0:
      Z = X - Y
   Else:
      Z = X + Y
Else:
   If X < 0:
      Z = X - Y
   Else:
      Z = X + Y

C'est écrit.

=IF(R18<0,IF(I18<0,I18-R18,I18+R18),IF(I18<0,I18-R18,I18+R18))

Comme indiqué ci-dessus, vous n'avez pas de cas zéro. Vous pouvez peut-être remplacer l'un des comparateurs LT / GT par LE / GE en ajoutant simplement un signe égal - en fonction de vos données et de votre logique.

Todd Curry
la source
Sauf si je lis mal quelque chose, dans le pseudocode plus grand que vous avez, If Y<0 {A} Else {B}mais A et B sont identiques. Y a-t-il une faute de frappe?
Kamil Drakari
3

Vous pouvez utiliser ce qui suit:

=IF(AND(I18<0,R18<0),I18-R18,IF(I18<0,I18+R18,IF(I18>0,I18-R18)))

Le seul défaut que je peux voir avec ceci est, que faites-vous dans un cas où I18 = 0, vous n'avez rien de prévu pour cela.

Quoi qu'il en soit, si vous souhaitez ajouter quelque chose pour cette instance, voir ci-dessous:

=IF(AND(I18<0,R18<0),I18-R18,IF(I18<0,I18+R18,IF(I18>0,I18-R18,"IF I18 = zero goes here")))
PeterH
la source
1

Je ne connaissais pas l'ABS. J'allais suggérer

= SQRT ((I18-R18) ^ 2)

Jinja
la source
2
Étant donné que le calcul des racines carrées est non trivial et sujet aux erreurs d'arrondi, ce n'est pas optimal.
David Foerster
0

Cela a fonctionné pour moi -> IF (AND (I18 <0, R18 <0), I18-R18, IF (I18 <0, ((R18-I18) * - 1), IF (I18> = 0, I18-R18 )))

Cela couvre tous les scénarios: Variable A | Variable B + ve | + ve + ve | -ve -ve | + ve -ve | -ve

user1001108
la source
(1) Le tableau des quatre (2²) combinaisons possibles de deux variables binaires ( + /  -) est trivial, et montrer qu'il ne fait rien pour clarifier votre réponse. Si vous allez publier une réponse à une question aussi peu claire que celle-ci, il est utile d'expliquer à quelle question vous pensez que vous répondez. (2) Quoi que vous fassiez, votre formule semble inutilement complexe. Il serait utile d'expliquer ce qu'il fait. ………………………………………………… Veuillez ne pas répondre dans les commentaires; modifiez  votre réponse pour la rendre plus claire et plus complète.
Scott
0

Je suis juste tombé sur une situation (mesure des lectures en laboratoire de couleur) où j'ai besoin non seulement de la différence entre x et y mais du mouvement delta positif ou négatif. Donc normalement -5 moins -2 = -3 mais vouloir montrer que le delta était en fait dans le sens positif -3 n'est pas ce que je recherche donc:

= SI (A1> B1, ABS (A1-B1) * - 1, ABS (A1-B1))

Autrement dit, si la 2ème lecture (plus récente) est plus petite, je sais que le résultat est un mouvement négatif (donc * -1) et s'est déplacé plus loin sur le côté négatif de l'axe. Sinon, si la 2e lecture est plus grande, la valeur ABS pure fonctionne en sachant que la différence est dans le sens positif.

Thomas Muchard
la source