我在工作表上的所有地方都有许多单元格,看起来像=((E9-E8)/E8)
。我想使用前两个值来进入这个新公式(EXP((LN(E9/E8)/14.32))-1)
。
如何一举将它们全部改为新配方?
答案 0 :(得分:18)
如果公式相同,您可以使用已查看和替换Match entire cell contents
和Look in: Formulas
。选择范围,进入查找和替换,输入和“全部替换”。
或者你的意思是说有几个具有相同形式的公式,但不同的单元格引用?如果是这样,那么一种方法是正则表达式匹配和替换。正则表达式不会内置到Excel(或VBA)中,但可以通过Microsoft的VBScript正则表达式库访问。
以下功能提供必要的匹配和替换功能。它可以在子程序中使用,该子程序将识别具有指定范围内的公式的单元格,并使用公式作为函数的输入。对于与您要查找的模式匹配的公式字符串,该函数将生成替换公式,然后可以将其写回工作表。
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
为了使该功能起作用,您需要添加对Microsoft VBScript Regular Expressions 5.5库的引用。在主功能区的Developer
标签中,选择VBA
,然后从主工具栏中选择References
。向下滚动以查找对库的引用,并选中它旁边的框。
答案 1 :(得分:6)
事实证明,解决方案是切换到R1C1 Cell Reference。我的工作表的结构使得每个公式都具有相同的结构,只是不同的引用。幸运的是,他们总是以同样的方式定位
=((E9-E8)/E8)
成了
=((R[-1]C-R[-2]C)/R[-2]C)
和
(EXP((LN(E9/E8)/14.32))-1)
成了
=(EXP((LN(R[-1]C/R[-2]C)/14.32))-1)
在R1C1参考中,每个公式都相同,因此查找和替换不需要通配符。谢谢那些回答的人!
答案 2 :(得分:3)
我通常使用第二个软件来处理这个问题。 对于Windows,我使用Notepad ++,对于OS X,我使用Sublime Text 2。
答案 3 :(得分:1)
使用通过ctrl + h可访问的查找和替换命令,确保您正在搜索单元格的功能。然后,您可以使用通配符来适应公式的任何偏差。 *#通配符,?对于charcter通配符,和〜?或者〜*来搜索?或*。
答案 4 :(得分:-1)
您还可以在Excel中单击“公式”选项卡,然后选择“显示公式”,然后使用常规的“查找”和“替换”功能。这不会影响您公式的其余部分。