Je veux savoir comment copier une formule dans une autre, tout en conservant les valeurs d'origine. Par exemple, j'ai dans la plage A1:A5
cinq valeurs (un mélange de constantes et / ou de formules) et j'ai besoin (dans cette même plage - pas dans une nouvelle colonne) d'inclure une fonction =Round("original value or formula",2)
(ou toute autre formule; ce n'est qu'un exemple)
Par exemple:
A1
valeur d'origine50.64635
A2
formule originale=3*F1
(qui peut afficher comme54.25875
siF1
contient18.08625
)A3
formule originale=SQRT(2)
(qui affichera comme1.4142136
)
Le résultat que je veux, c'est:
A1
nouveau contenu (formule)=round(50.64635,2)
A2
nouveau contenu (formule)=round(3*F1,2)
A3
nouveau contenu (formule)=round(SQRT(2),2)
etc. Notez que je ne veux A1
pas être changé en 50.65
, et je ne veux A2
pas être changé pour 54.26
ou même =ROUND(54.25875,2)
, etc. Je sais comment faire des choses similaires avec des opérations simples ( copy/paste special – Formula – add, substract, multiply, divide
) tout en conservant les valeurs ou formules originales. Mais je ne sais pas comment envelopper une fonction autour d'une valeur existante ou créer une formule, en utilisant une formule existante comme composant.
L’autre idée serait de convertir mes valeurs / formules d’origine en texte, d’utiliser la fonction find / replace, de concaténer ou de mélanger un mélange étrange et j’en arriverais au résultat souhaité, mais j’aimerais savoir s’il existe un moyen plus court; )
Réponses:
La fonctionnalité "Rechercher et remplacer" d'Excel ne semble pas être assez puissante pour faire ce que vous voulez. Cependant, c'est assez facile en VBA.
Tout d’abord, faites une copie de votre fichier, juste au cas où quelque chose se passerait mal.
Créez ensuite le sous-programme VBA suivant:
Voir Comment ajouter VBA dans MS Office? pour obtenir des informations générales sur l'utilisation de VBA dans Excel et les autres applications Microsoft Office.
Arom79Sub
est juste un nom de sous-routine arbitraire; Utilisez le nom que vous voulez.On Error Resume Next
dit, si une erreur se produit, il suffit d'aller à la déclaration suivante et de continuer à courir. (Par exemple, si une cellule contient une valeur constante qui n'est pas un nombre (c'est-à-dire une valeur chaîne / texte), le code ci-dessus provoquera une erreur.)For Each c
...Next c
est une boucle qui examine chaque cellule de la plageA1:A5
, en définissantc
une référence pour chaque cellule en séquence.c.HasFormula
est un booléen qui indique si la cellulec
contient une formule. Ensuite, nous vérifions également si le premier caractère de la "formule" est=
. C'est probablement redondant. S'il s'agit bien d'une formule, définissez-latemp
sur la formule actuelle. c'est-à-dire tout à droite du=
(par exemple3*F1
, dans votre exemple pourA2
).temp
la valeur dans la cellule (par exemple50.64635
, dans votre exemple pourA1
).=ROUND(previous_contents, 2)
On Error GoTo 0
pour restaurer la gestion normale des erreurs.Ensuite, lancez le sous-programme.
De toute évidence, vous pouvez modifier la plage ou la nouvelle formule.
la source