简单的excel查找和替换公式
Posted
技术标签:
【中文标题】简单的excel查找和替换公式【英文标题】:Simple excel find and replace for formulas 【发布时间】:2013-07-24 17:59:55 【问题描述】:我在工作表上到处都有许多单元格,看起来像=((E9-E8)/E8)
。我想使用前两个值进入这个新公式(EXP((LN(E9/E8)/14.32))-1)
。
如何一举将它们全部更改为新公式?
【问题讨论】:
All over the place 意味着在三个不同的列中,公式总共出现了 31 次。我最终切换到 R1C1,因为在每种情况下结构都是相同的。看我的回答。 我的产品,FormulaDesk 有一个公式重构功能,可以做到这一点。使用占位符定义要查找的模式,然后使用占位符中的变量定义输出文本。见:formuladesk.com(我没有添加这个作为答案,因为我不想自我推销,但我认为它确实完美地回答了你的问题。如果其他人想添加这个作为答案,那么请做) 【参考方案1】:您还可以单击 Excel 中的“公式”选项卡并选择“显示公式”,然后使用常规的“查找”和“替换”功能。这不应该影响您的公式的其余部分。
【讨论】:
这对我来说非常有效。我能够在一个替换所有命令中更改工作表中众多公式中的 300 多个引用。【参考方案2】:我通常处理这个问题的方式是使用第二个软件。 对于 Windows,我使用 Notepad++,对于 OS X,我使用 Sublime Text 2。
-
在 Excel 中,点击 Control + ~ (OS X)
Excel 会将所有值转换为其公式版本
CMD + A(我通常这样做两次)来选择整个工作表
复制所有内容并粘贴到 Notepad++/Sublime Text 2 中
在此处查找/替换您的公式内容
复制内容并粘贴回 Excel,确认有关单元格大小差异的任何问题
Control + ~ 切换回数值模式
【讨论】:
【参考方案3】:如果公式相同,您可以使用“查找和替换”以及选中的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
。向下滚动以找到对库的引用并选中它旁边的框。
【讨论】:
是的,有几个公式的形式相同,但单元格引用不同。【参考方案4】:事实证明,解决方案是切换到 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 参考中,每个公式都是相同的,因此查找和替换不需要通配符。感谢那些回答的人!
【讨论】:
【参考方案5】:使用可通过 ctrl+h 访问的查找和替换命令,确保您正在搜索单元格的功能。然后,您可以使用通配符来适应公式的任何偏差。 * 表示 # 个通配符,?对于字符通配符,和 ~?或 ~* 搜索?或 *。
【讨论】:
我是新手,所以我不太确定它是如何工作的。我将如何使用通配符表示我在问题中提出的公式?同样,我有 30 个看起来像这样的公式,它们都有不同的引用,我想将它们更改为看起来像第二个公式。 将所有单元格引用更改为通配符将如下所示;查找:=((?*-?*)/?*) 替换:=(EXP((LN(?*/?*)/14.32))-1) 如果您需要更多通配符,我希望这会起到很好的作用给你的例子。 不幸的是,这不起作用。幸运的是,我能够以不同的方式解决这个问题。如果你好奇,请看我的回答以上是关于简单的excel查找和替换公式的主要内容,如果未能解决你的问题,请参考以下文章