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?
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.
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é.
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!
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.
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 *.