Vous cherchez une solution pour raccourcir une formule IF

9

J'ai une longue formule avec la structure suivante:

=IF(!X!<>0,!X!+A1,"")

! X! est une formule très longue.

Existe-t-il une solution pour éviter de répéter le! X! deux fois? J'en ai besoin pour deux raisons:

  1. Pour rendre la formule lisible pour l'utilisateur de la feuille
  2. Pour réduire le temps de traitement

J'apprécie toute aide.

Merci, Dio

Dio
la source
1
si vous le souhaitez, To reduce the process timevous devez évidemment stocker le résultat quelque part, sinon Excel doit recalculer à nouveau la valeur lorsque la condition correspond. La division est également une opération très coûteuse
phuclv
2
Juste curieux aussi, avez-vous "joué au golf" autant que possible? Pour le raccourcir, peut-être ajouter des plages nommées?
BruceWayne
Pour rendre une formule longue plus lisible, séparez les arguments sur différentes lignes en utilisant alt + return. Un inconvénient est que, sauf si l'utilisateur augmente la hauteur de la barre de formule, la formule semble incomplète.
Brad Smith
Librement liée: affichage vierge lorsque Référencer cellule vide dans Excel
G-Man dit « Réintégrer Monica »

Réponses:

12

Une autre approche consiste à utiliser la double inversion :

=IFERROR(1/(1/really_long_formula)+A1,"")

Si le really_long_formula est évalué à 0 , vous obtiendrez une division par zéro et le IFERROR()rattrapera!

Veuillez noter que la manière habituelle (et la meilleure) de gérer cette exigence est d'utiliser une cellule d'assistance.

L'élève de Gary
la source
7
cela peut souffrir d'une perte de précision due à la division en virgule flottante
phuclv
3
@ LưuVĩnhPhúc Vous avez tout à fait raison! l' approche AFH est la meilleure approche!
L'élève de Gary,
C'est une belle et sale astuce. Je m'abstiendrais fortement de l'utiliser, mais, en dernier recours, qui sait?
André Chalella
3
REMARQUE: il est vrai qu'il peut y avoir une perte de précision, mais ce serait rarement un problème pertinent. J'ai testé 1/1/xplusieurs fois 100 000 nombres aléatoires dans Excel, et seulement 1,4% du temps, il y avait une erreur d'arrondi. L'erreur relative maximale que j'ai jamais trouvée était de 1,6e-16, ce qui est bien, effectivement, zéro. De plus, fait intéressant, les entiers n'ont jamais affiché d'erreurs d'arrondi (testé plusieurs plages de 0 à 1e14). Donc, cette réponse peut être mal vue d'un point de vue pureté / propreté, mais pas d'un point de vue pratique de calcul.
André Chalella
1
Je trouve la solution de Gary la meilleure. D'abord parce qu'il est propre (comme mentionné également par André) et lisible par les autres utilisateurs. Deuxièmement, parce que cela répond à mes besoins. Je n'ai pas d'entiers compliqués ou longs. J'espère que les utilisateurs, qui choisissent cette approche, ont lu les commentaires pour être conscients des avantages et des inconvénients de cette solution.
Dio
23

La réponse évidente est de mettre la formule dans une cellule de travail, loin de la feuille principale. Par exemple, si vous utilisez H1, définissez-le sur:

=!X!

Votre formule devient alors:

=IF(H1<>0,H1+A1,"")

C'est typique de ce que l'on ferait dans n'importe quel autre langage de programmation.

AFH
la source
Je n'ai pas la possibilité d'ajouter une colonne d'aide. Merci quand même.
Dio
2
@Dio si ce n'est pas censé être vu, masquez simplement la colonne. Vous pouvez même nommer la colonne / plage pour la rendre plus facile à lire
phuclv
4
@Dio - OK. Votre réponse acceptée est plutôt intelligente, mais sachez que, en raison de l'arrondissement, vous risquez de perdre la précision ( 1/(1/x)n'est pas toujours exactement la même que x), surtout si vous avez affaire à des données entières. Il n'est également pas applicable de manière plus générale (par exemple, vérification de moins de zéro). (Commentaire croisé avec la réponse acceptée de @ LưuVĩnhPhúc.)
AFH
Merci pour vos conseils et commentaires. Je vais laisser la question encore ouverte pour voir s'il y a encore de nouvelles suggestions.
Dio
2
Il serait utile de voir la longue formule. Outre une cellule de travail, il est possible de définir un nom dans une feuille de calcul qui contient une formule
datatoo
3

Avez-vous vraiment besoin que le résultat soit ""dans le faux cas? Si vous avez seulement besoin que la cellule soit vide (par exemple, vous n'utiliserez pas quelque chose comme =ISNUMBER()ça plus tard), vous pouvez utiliser un formatage conditionnel pour masquer le contenu dans le faux cas.

Le format conditionnel que vous appliquerez à la cellule pour qu'elle n'affiche rien est le format personnalisé "", comme celui-ci (il est en portugais mais vous avez l'idée):

format personnalisé pour les cellules vides

La formule dans la cellule sera, comme prévu, simplement =!X!+A1.

La formule de mise en forme conditionnelle pourrait être =!X!=0, mais cela forcerait le recalcul de !X!ce que vous ne voulez pas (votre «point 2»). Il vaut mieux exploiter la cellule elle-même en utilisant =B1=A1(en supposant que notre cellule est B1 ) - cela impliquerait !X! = 0.

Même si vous avez besoin que le contenu de la cellule soit réellement "", des modifications mineures peuvent généralement être apportées dans la feuille de calcul afin que cette approche puisse être utilisée. Si tel est le cas, laissez un commentaire décrivant la situation.

André Chalella
la source
1

Je n'ai pas la possibilité d'ajouter une colonne d'aide. Merci quand même.

Si vous ne pouvez pas ajouter une colonne d' aide , pourquoi ne pas ajouter une feuille de calcul entière? Il y a plusieurs avantages à cela:

  • Votre cellule d'assistance ne prend pas d'espace qui pourrait autrement être utilisé, car elle se trouve dans une feuille de calcul distincte.
  • Vous pouvez nommer la cellule puis l'adresser par son nom, par exemple=IF(X<>0,X+A1,"")
  • Si vous devez effectuer cette opération dans plusieurs cellules, vous pouvez:
    1. Renommer la feuille de calcul d'aide "helper"
    2. Mettez l'équation d'aide dans la même cellule que l'équation principale (appelons-la D5.
    3. Adresse la cellule comme helper!D5dans la feuille principale.
  • Vous pouvez masquer la feuille d'assistance si nécessaire.
  • C'est plus rapide que d'évaluer deux fois.
  • Il ne perd pas de précision.

Les inconvénients que je peux voir sont:

  • Vous devez référencer les cellules sans nom dans la feuille principale comme sheetname!D5au lieu de tout comme D5.
  • Maintenant, la formule est en deux parties au lieu d'une.
  • Prolifération des feuilles de calcul.

En pesant les avantages et les inconvénients, je pense que pour de nombreux cas d'utilisation, c'est une bonne solution. Il existe des situations où ce n'est pas optimal, même si je n'y pense pour l'instant.

wizzwizz4
la source
1
Très bonne réponse. Les inconvénients que je vois sont: 1. Cela n'aide pas beaucoup à rendre le calcul plus simple pour l'utilisateur, car maintenant la grande formule est cachée. 2. De nombreux classeurs sont déjà remplis de feuilles. Même si vous le cachez, vous devrez peut-être parcourir de nombreuses feuilles cachées pour le révéler. A part ça, c'est une bonne solution.
André Chalella
@ AndréNeves Merci pour ça! Cette première idée m'est venue à l'esprit, mais je l'ai oubliée au moment où j'écrivais la section des inconvénients .
wizzwizz4
1

une option pas encore suggérée est de créer une fonction définie par l'utilisateur. Vous devez activer l'onglet Développeur dans la barre de menus (google it) et créer un module.

 public function udf_myCalc(ValueToAdd as double)
    dim myvar as double
    dim udf_myCalc as double
    myvar = .. put the logic of !X! in here

    if myvar<>0 then 
        udf_myCalc = myvar + ValueToAdd
    else
        udf_myCalc = ValueToAdd
    end if
 end function

Dans la barre de formule, vous feriez alors

=udf_myCalc(A1)

REMARQUE: cela devient maintenant un fichier .xlsx (avec macros) et peut nécessiter des autorisations supplémentaires dans un réseau d'entreprise car les macros peuvent être utilisées à des fins malveillantes et certains filtres de messagerie les bloqueront. Les fonctions ne sont pas documentées, vous devrez donc fournir des notes sur ce que font vos fonctions et je trouve utile d'appeler toutes mes fonctions udf_xxxxx pour qu'il soit clair qu'il ne s'agit pas d'une fonction intégrée

Il existe également d'autres GOTCHA avec des FDU. Voir ce lien pour quelques bons conseils http://www.decisionmodels.com/calcsecretsj.htm

Aaron Reese
la source