2010-11-16 4 views
7

J'ai une feuille de calcul qui a un petit nombre d'entrées, qui conduisent un grand nombre de calculs intermédiaires, qui à leur tour conduire un petit nombre de calculs coûteux qui dépendent de nombreuses valeurs intermédiaires. Certains calculs utilisent des fonctions UDF qui renvoient à la fois des valeurs de retour uniques et des tableaux, alors que d'autres sont des formules régulières dans la cellule elle-même.Existe-t-il un ordre de mise à jour des cellules Excel Excel documenté?

Je suis curieux de savoir s'il existe un modèle connu pour décrire l'ordre de mise à jour des cellules dans Excel. Par exemple, il peut s'agir de modifier l'entrée A1, dont dépendent les calculs B1, B2, B3, et le calcul C1 dépend de B1, B2 et B3 ... C1 sera mis à jour trois fois en tant que valeurs intermédiaires mise à jour, ou B1, B2 et B3 seront-ils mis à jour en premier et les mises à jour C1 une seule fois?

+0

Pour ce que cela vaut, un simple test basé sur mon exemple montre que C1 ne se met à jour qu'une seule fois, lorsque les 3 variables intermédiaires 'B' dépendent de A1, et que C1 dépend de B1, B2 et B3. Je suis un peu réticent à généraliser cependant. – tbischel

+0

A moins que nous ne puissions trouver un doc l'indiquant, je préfère aussi ne rien présumer des internes d'Excel –

Répondre

5

Il y a une documentation sur les algorithmes utilisés par Excel pour trouver des séquences de calcul ici
http://www.decisionmodels.com/calcsecretsc.htm
http://msdn.microsoft.com/en-us/library/aa140058%28office.10%29.aspx

Mais la ligne de fond est que, puisque la chaîne de calcul est déterminé de manière dynamique et commence à partir des cellules de la séquence précédente de la chaîne de calcul peut être calculé plus d'une fois en une occasion et non sur un recalcul ultérieur.
Si vous connaissez la structure de vos dépendances de calcul, vous pouvez contrôler les choses dans une certaine mesure en utilisant Range.Calculate et Sheet.calculate.

4

Excel utilise maintenant Multi-Threaded Calculation ce qui rend l'ensemble difficile à prévoir, à l'exception des enfants orientés dans l'arbre de dépendance. Voir le lien

HTH!

1

En ce qui concerne votre question plus spécifique « C1 = C1 (B1, B2, B3) et B1 = B1 (A1), B2 = B2 (A1), B3 = B3 (A1) l'ordre de calcul seront

1) A1 2) B1, B2, B3 (dans un ordre arbitraire) 3) C1

et C1 sera calculé qu'une seule fois.

Je fais cette demande d'aucune documentation Excel mais de mon expérience avec Excel et mon travail sur un gestionnaire d'objets Java pour les feuilles de calcul (voir this paper) .De ce que j'ai observé, Excel ne fait pas appel inutile s aux fonctions dans la cellule. Si l'arbre de dépendance d'une feuille a plusieurs "feuilles" qui pourraient "enflammer" le calcul, alors il n'est pas déterminé où Excel démarre. Si vous ouvrez une feuille et que la feuille entière est recalculée, l'ordre de calcul des cellules "indépendantes" est difficile à prévoir. Le cache des valeurs stockées avec la feuille peut avoir un effet sur le recalcul. (Ce que j'ai vu est: la première cellule excel touche la dernière cellule changée avant que la feuille ait été sauvegardée).

Questions connexes