I have numerous cells all over the place on a worksheet that look like =((E9-E8)/E8)
. I want to use the first two values to go into this new formula, (EXP((LN(E9/E8)/14.32))-1)
.
How can I change them all to the new formula in one fell swoop?
如果公式相同,您可以使用 Find and Replace 并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 正则表达式 5.5 库的引用。从Developer
主功能区的选项卡中,选择VBA
,然后References
从主工具栏中。向下滚动以找到对库的引用并选中它旁边的框。
事实证明,解决方案是切换到 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 Reference 中,每个公式都是相同的,因此查找和替换不需要通配符。感谢那些回答的人!
我通常处理这个问题的方式是使用第二个软件。对于 Windows,我使用 Notepad++,对于 OS XI,使用 Sublime Text 2。
使用通过 ctrl+h 访问的查找和替换命令,确保您正在搜索单元格的功能。然后,您可以使用通配符来适应公式的任何偏差。* 表示 # 个通配符,? 对于字符通配符,和 ~? 或 ~* 搜索?或者 *。
您还可以单击 Excel 中的“公式”选项卡并选择“显示公式”,然后使用常规的“查找”和“替换”功能。这不应该影响您的公式的其余部分。