web-dev-qa-db-fra.com

Recherche et remplacement Excel simples pour les formules

J'ai de nombreuses cellules partout dans une feuille de calcul qui ressemblent à =((E9-E8)/E8). Je souhaite utiliser les deux premières valeurs pour entrer dans cette nouvelle formule, (EXP((LN(E9/E8)/14.32))-1).

Comment puis-je les changer tous en une nouvelle formule d'un seul coup?

14
Tomulent

Si les formules sont identiques, vous pouvez utiliser Rechercher et remplacer par Match entire cell contents vérifié et Look in: Formulas. Sélectionnez la plage, allez dans Rechercher et remplacer, faites vos entrées et `Remplacer tout.

enter image description here

Ou voulez-vous dire qu'il existe plusieurs formules avec cette même forme, mais des références de cellule différentes? Si c'est le cas, alors une façon de procéder est une correspondance d'expression régulière et son remplacement. Les expressions régulières ne sont pas intégrées à Excel (ou VBA), mais sont accessibles via la bibliothèque d'expressions régulières VBScript de Microsoft.

La fonction suivante fournit la capacité de correspondance et de remplacement nécessaire. Il peut être utilisé dans un sous-programme qui identifierait les cellules avec des formules dans la plage spécifiée et utiliserait les formules comme entrées pour la fonction. Pour les chaînes de formules qui correspondent au modèle que vous recherchez, la fonction produira la formule de remplacement, qui pourrait ensuite être réécrite dans la feuille de calcul.

Function RegexFormulaReplace(formula As String)
    Dim regex As New RegExp
    regex.Pattern = "=\(\(([A-Z]+\d+)-([A-Z]+\d+)\)/([A-Z]+\d+)\)"
'   Test if a match is found
    If regex.Test(formula) = True Then
        RegexFormulaReplace = regex.Replace(formula, "=(EXP((LN($1/$2)/14.32))-1")
    Else
        RegexFormulaReplace = CVErr(xlErrValue)
    End If
    Set regex = Nothing
End Function

Pour que la fonction fonctionne, vous devez ajouter une référence à la bibliothèque Microsoft VBScript Regular Expressions 5.5. Dans l'onglet Developer du ruban principal, sélectionnez VBA puis References dans la barre d'outils principale. Faites défiler vers le bas pour trouver la référence à la bibliothèque et cochez la case à côté.

18
chuff

Il s'avère que la solution était de passer à la référence de cellule R1C1. Ma feuille de calcul était structurée de telle manière que chaque formule avait la même structure, juste des références différentes. Heureusement, ils étaient toujours positionnés de la même manière

=((E9-E8)/E8) 

est devenu

=((R[-1]C-R[-2]C)/R[-2]C)

et

(EXP((LN(E9/E8)/14.32))-1)

est devenu

=(EXP((LN(R[-1]C/R[-2]C)/14.32))-1)

Dans la référence R1C1, chaque formule était identique, la recherche et le remplacement ne nécessitaient donc pas de caractères génériques. Merci à ceux qui ont répondu!

6
Tomulent

La façon dont je gère généralement cela est avec un deuxième logiciel. Pour Windows, j'utilise Notepad ++, pour OS X j'utilise Sublime Text 2.

  1. Dans Excel, appuyez sur Contrôle + ~ (OS X)
  2. Excel convertira toutes les valeurs dans leur version de formule
  3. CMD + A (je le fais généralement deux fois) pour sélectionner la feuille entière
  4. Copiez tout le contenu et collez-le dans Notepad ++/Sublime Text 2
  5. Trouvez/remplacez le contenu de votre formule ici
  6. Copiez le contenu et collez-le dans Excel, confirmant tout problème concernant les différences de taille de cellule
  7. Contrôle + ~ pour revenir en mode valeurs
3
Craig Hooghiem

Utilisez la commande find and replace accessible via ctrl + h, assurez-vous que vous recherchez dans les fonctions des cellules. Vous pouvez ensuite utiliser des caractères génériques pour tenir compte des écarts de la formule. * pour # caractères génériques,? pour les caractères génériques et ~? ou ~ * pour rechercher? ou *.

1
Mason