J'ai une feuille de calcul Excel très compliquée (formules accédant à des cellules avec d'autres formules sur plusieurs feuilles de calcul) qui calcule finalement une seule cellule (sortie) avec l'entrée de plusieurs autres cellules (paramètres). Existe-t-il un moyen automatisé (une macro Excel ou un outil autonome) qui pourrait commencer à la cellule de sortie et dérouler les calculs de manière récursive jusqu'à ce qu'il exprime directement la formule en termes de cellules de paramètres?
Clarification
Dans les commentaires, il y avait une suggestion de l'outil Evaluer la formule. Bien que je n’aie pas trouvé comment l’activer dans Excel 2008 pour Mac, sa description donne à penser qu’elle permet à l’utilisateur d’effectuer une évaluation pas à pas d’une cellule. Ce n'est pas ce dont j'ai besoin. Ce dont j'ai besoin, c'est d'un moyen de convertir la formule dans une cellule donnée pouvant faire référence à d'autres cellules contenant des formules, en une formule équivalente exprimée en termes de cellules finales (celles qui contiennent des valeurs, mais pas des formules).
Voici un exemple simple. Laisser
A1
contenir= B1 + C1
B1
contenir= B2 * B2
C1
contenir= C2 * C2
B2
contenir1
C2
contenir2
Evaluer la formule me permettrait d’effectuer un calcul détaillé A1
pour arriver à la valeur finale de 5
. Ce dont j'ai besoin, c'est d'un outil qui permettrait de suivre A1
la formule = B2 * B2 + C2 * C2
sans l'évaluer réellement.
la source
= (1*1) + (2*2)
pour cette situation; merci d'avoir éclairci ça. Vous pouvez utiliser l’évaluation de la formule à l’aide de la fonction «Pas à pas», mais vous devrez prendre un million de captures d’écran en cours de route et assembler les résultats manuellement. ( Cette image composite , fortement modifiée à des fins esthétiques, illustre le processus.) Ce n'est clairement pas pratique.Réponses:
Le problème
Vous ne pouvez pas faire cela avec Evaluate Formula parce que ce n'est pas le but de la fonction. C'est pourquoi on l'appelle évaluer , c'est pour évaluer les formules. Ce que vous voulez, c'est une sorte de déballage. C'est un besoin un peu spécial, de sorte qu'il n'est pas implémenté comme outil dans Excel, mais il existe des solutions si vous créez des fonctions / macros Visual Basic.
Créez un module de code VBA (macro) comme vous pouvez le voir dans ce tutoriel .
Module
dansInsert
.Puis entrez ce qui suit dans une cellule:
=CellFormula(A1)
Cela dira la formule de la cellule. Le seul problème avec ce code est qu'il ne fonctionne que pour un niveau. Si vous souhaitez également décompresser les formules de cellules contenues, vous avez besoin d'un code plus complexe avec récursivité.
La solution
Le voyage a été long, mais j’ai créé pour vous une macro VBA qui implémente cette fonction. Je ne dis pas que ce code fonctionnera pour toutes les formules, mais cela fonctionnera dans la plupart / certaines d'entre elles. De plus, je ne précise pas que ce code générera des formules équivalentes au code entré à l'origine ou donnera le même résultat que l'original.
Code source
Pour que cela fonctionne, il suffit de créer une macro (comme je l'ai décrite au début de la réponse) et de copier-coller le code. Après cela, vous pouvez l'utiliser avec
=CellFormula(A1)
oùA1
peut être n'importe quel type de cellule 1x1.Cas ça marche
J'ai créé quelques exemples pour que vous puissiez le voir en action. Dans ce cas, je démontre l'utilisation avec des chaînes. Vous pouvez voir que cela fonctionne parfaitement. Le seul petit problème est que, pour l’algorithme, l’algorithme change les points-virgules en virgules. Après les avoir remplacés (comme je l’ai fait dans cet exemple), vous obtenez le bon résultat.
Ici, vous pouvez voir comment cela fonctionne avec les chiffres. Maintenant, nous sommes confrontés au premier problème que l’algorithme ne se soucie pas de la séquence des opérations mathématiques, c’est pourquoi le nombre rouge est 6 alors qu'il devrait être 10. Si nous plaçons les opérations sensibles (comme l’addition et la soustraction) entre parenthèses, la formule donnée entrée en arrière donnera le même résultat que vous pouvez voir dans le nombre vert en bas qui dit 10.
Cas ça ne marche pas
Cet algorithme n'est pas parfait. J’ai seulement essayé d’implémenter les utilisations les plus courantes. Il est donc possible de l’améliorer en ajoutant davantage de fonctionnalités prenant en charge d’autres cas, comme les plages.
Comme vous pouvez le voir dans cet exemple, j'ai utilisé
SUM()
une plage en tant que paramètre. Étant donné que l’algorithme décrypte le contenu des cellules de haut en bas, il commence par le remplacement desSUM()
paramètres au plus tard. Par conséquent, les:
objets restent à sa place pendant que tout est remplacé, de sorte que les nouvelles cellules sont remplacées à proximité, ce qui en changera le sens. Ainsi, la sortie sera fausse. Donc, dans ce cas, vous ne pouvez utiliser cette macro que pour étudier la formule d'origine.la source
Étant donné que vous utilisez le mot "trace" dans votre question, je suppose que vous connaissez les fonctions
Trace Precendents
etTrace Dependents
dans la section "Audit de formules" d'Excel?Voici une brève explication de chacun des outils d'audit de formules de dummies.com:
Comprendre les outils d'audit de formules d'Excel 2010
la source