J'ai une longue formule avec la structure suivante:
=IF(!X!<>0,!X!+A1,"")
où ! 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:
- Pour rendre la formule lisible pour l'utilisateur de la feuille
- Pour réduire le temps de traitement
J'apprécie toute aide.
Merci, Dio
To reduce the process time
vous 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ûteuseRéponses:
Une autre approche consiste à utiliser la double inversion :
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.
la source
1/1/x
plusieurs 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.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:Votre formule devient alors:
C'est typique de ce que l'on ferait dans n'importe quel autre langage de programmation.
la source
1/(1/x)
n'est pas toujours exactement la même quex
), 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.)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):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.la source
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:
=IF(X<>0,X+A1,"")
D5
.helper!D5
dans la feuille principale.Les inconvénients que je peux voir sont:
sheetname!D5
au lieu de tout commeD5
.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.
la source
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.
Dans la barre de formule, vous feriez alors
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
la source