Comment copier une formule ou une valeur dans une autre formule

0

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:A5cinq 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'origine  50.64635
  • A2formule originale =3*F1   (qui peut afficher comme 54.25875 si F1contient 18.08625)
  • A3formule originale =SQRT(2)   (qui affichera comme 1.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 A1pas être changé en 50.65, et je ne veux A2pas être changé pour 54.26ou 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; )

Arom79
la source
il n'est pas clair comment la mise en forme conditionnelle est liée à votre question, cela ne change pas la valeur dans les cellules. De plus, votre question est trop large, nous pouvons donner des indications sur des problèmes spécifiques, mais il n’existe aucun moyen de "modifier en lots" plusieurs cellules dans Excel. Une solution à votre question d'arrondi serait de définir le formatage des nombres, puis dans Excel, définissez "définir la précision telle qu'elle est affichée" (l'autre option serait VBA, mais cela nécessite un apprentissage)
Máté Juhász
@ MátéJuhász Le PO utilise les mots "formule conditionnelle" . Pas sûr qu'ils se réfèrent à la mise en forme conditionnelle. Nous devrons attendre la réponse pour voir ce qu'ils veulent vraiment dire.
CharlieRB
Je pense avoir compris la question et je l'ai modifiée pour tenter de la clarifier. Bien sûr, si je me suis trompé, modifiez- le et corrigez-le. PS Personne ne sait ce que vous entendez par "formule conditionnelle".
Scott
Merci d'avoir édité Scott. Vous avez bien compris. Par "formule conditionnelle", je voulais dire des fonctions logiques ou toute autre fonction.
Arom79
@ Arom79: La manière officielle de remercier est d' accepter une réponse en cliquant sur la coche à côté. Une fois que votre réputation est suffisante , vous pourrez voter pour les questions et les réponses que vous avez trouvées utiles.
Scott

Réponses:

0

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:

Sub Arom79Sub()

    On Error Resume Next
    For Each c In Range("A1:A5")
        If c.HasFormula And Left(c.Formula, 1) = "=" Then
            temp = Right(c.Formula, Len(c.Formula) - 1)
        Else
            temp = c.Value
        End If
        If temp <> "" Then
            c.Formula = "=ROUND(" & temp & ", 2)"
        End If
    Next c
    On Error GoTo 0

End Sub

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.  Arom79Subest juste un nom de sous-routine arbitraire; Utilisez le nom que vous voulez.

  • On Error Resume Nextdit, 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 cest une boucle qui examine chaque cellule de la plage A1:A5, en définissant cune référence pour chaque cellule en séquence.
  • c.HasFormulaest un booléen qui indique si la cellule ccontient 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-la tempsur la formule actuelle. c'est-à-dire tout à droite du = (par exemple  3*F1, dans votre exemple pour A2).
  • Sinon, définissez templa valeur dans la cellule (par exemple 50.64635, dans votre exemple pour A1).
  • Si la valeur (ou la formule) n'est pas vide, définissez la formule de la cellule sur .
            =ROUND(previous_contents, 2)
  • Faites On Error GoTo 0pour restaurer la gestion normale des erreurs.

Ensuite, lancez le sous-programme.

De toute évidence, vous pouvez modifier la plage ou la nouvelle formule.

Scott
la source
Merci Scott. Le sous-programme fonctionne parfaitement !! Je vais essayer de jouer avec pour s'adapter à d'autres fonctions.
Arom79
Et merci pour l'explication détaillée aussi !!
Arom79