Obtenir la formule d'une autre cellule dans une cellule cible

Comment une cellule obtient-elle la formule d'une autre cellule en tant que text sans utiliser VBA? Je peux voir que cette question a déjà été posée plusieurs fois et la réponse est toujours d'écrire une fonction personnalisée dans VBA.

Cependant, j'ai trouvé un article publié en 2006 qui prétendait avoir trouvé la solution non-VBA, mais le lien fourni dans cette publication est déjà interrompu.

Une idée?

Il existe une belle façon de le faire sans VBA. Il utilise des macros XL4 (ce sont des macros, mais ce n'est pas VBA, comme demandé).

En reference à la figure 1, les cellules A2: A4 contiennent des formules habituelles.

entrez la description de l'image ici

  1. Aller aux formules -> Définir le nom, j'ai défini deux plages nommées (voir la figure 2), avec les informations figurant dans les cellules A6: B8.

    entrez la description de l'image ici

  2. Entrez dans la cellule B2 =FormulaAsText . Cela récupérera la formule dans la cellule A2 en tant que text.

    Explication : la gamme nommée FormulaAsText utilise =GET.CELL(info_type,reference) . Dans ce cas, ìnfo_type = 6 récupère la formule, et reference = OFFSET(INDIRECT("RC",FALSE),0,-1) utilise la cellule avec 0 lignes et -1 décalage de colonnes de celle dans laquelle la formule est utilisée.

  3. Copiez B2 et collez dans B3: B4. Cela montrera les formules dans A3: A4. La cellule A4 montre que la fonction de feuille de calcul CELL ne récupère que des valeurs, pas des formules (par opposition à GET.CELL ).

  4. Puisque FormulaAsText obtient la formule à partir d'une cellule au décalage fixe (0, -1) du courant, j'ai défini une autre gamme FormulaAsText2 , qui utilise un décalage (lignes, cols) lu à partir de la feuille de calcul elle-même. Cellules D2: D4 contient =FormulaAsText2 . Ainsi, la cellule D2 montre le contenu de la cellule B3 ( =OffSET(D2,1,-2) ), qui est FormulaAsText . les cellules D3: D4 montrent le contenu d'elles-mêmes. Cela ajoute une certaine souplesse. YMMV.

PS1: l'essence a été prise à partir de http://www.mrexcel.com/forum/excel-questions/20611-info-only-get-cell-arguments.html

PS2: Tim Williams a mentionné dans un commentaire "l'ancien XLM GET.FORMULA() ". Cette réponse est peut-être liée (pas la même, puisque celle-ci utilise GET.CELL() ).

PS3: Une solution VBA simple est donnée, par exemple, dans http://dmcritchie.mvps.org/excel/formula.htm

=FormulaText(Reference) fera l'affaire Documentation

Il existe un moyen de le faire. Dans mon exemple, j'ai eu une table qui a montré une date. La date vient de Sheet! G91. Dans ma table, j'avais aussi une colonne qui montrait le nom de la feuille. J'ai ajouté deux autres colonnes à ma table. La première colonne avait une colonne (Sheet! G91), qui renvoie le numéro 7, car G est la septième lettre de l'alphabet. J'ai ensuite converti le nombre en lettre (G) en utilisant un autre tableau dans mon classur. Dans la deuxième colonne que j'ai ajouté, j'ai fait une ligne de formule (Feuille! G91), qui renvoie le numéro 91. Remarque: La ligne et la colonne peuvent apparaître comme des formules volatiles, qui recalculent avec chaque calcul du classur.

Je voulais une autre colonne pour montrer le contenu de la formule de la cellule de date mentionnée au début de cette publication. J'ai inclus la fonction de string suivante (vous pouvez également utiliser CONCATENATE).

"=" & AJ9 & "!" & AM9 & AN9

Les éléments séparés par les mots-keys se combinent (c'est-à-dire concaténés). AJ9 dans mon exemple contient le nom de la feuille, AM9 contient la lettre de colonne et AN9 contient le numéro de ligne.

J'ai maintenant une colonne qui met à jour dynamicment son contenu pour refléter le nom de la feuille et la reference de la cellule. Les résultats dans ma cellule de classur sont

= Feuille! G91.

Cette suggestion peut être utile pour ceux qui, après avoir récupéré un bloc de formules et les transportant vers une nouvelle feuille de calcul, souhaitent les remettre en marche. La fonction FORMULATEXT excelle est idéale pour ramasser des formules, mais elle les laisse comme des strings de text inutilisables. Si vous souhaitez les récupérer en tant que formules entièrement fonctionnelles, vous devez éditer chacun individuellement pour supprimer le caractère de string, mais voici un raccourci pour les blocs plus gros. Accédez au post où vous avez les formules requirejses en tant que text (en d'autres termes, après avoir utilisé FORMULATEXT – vous avez fait une copy et (une seule valeur) collez). La prochaine étape implique de mettre en évidence toutes les cellules que vous souhaitez convertir, puis de naviguer vers l'option de menu [Text-To-Columns] ({Data} sur Excel 2016). Vous pouvez sélectionner «Delimited», mais sur l'écran suivant, assurez-vous de désélectionner les marques qui apparaissent dans vos formules. Ensuite, «Terminer». Excel devrait parsingr automatiquement les cellules comme contenant des formules et vous devriez maintenant les faire fonctionner à nouveau.

Vous ne pouvez pas. C'est probablement un choix de design pour éliminer un user moyen de Excel d'get accidentellement quelque chose qu'ils ne voulaient pas.

Ce que vous lisez est correct – l'écriture d'un UDF est la solution souhaitée.