Excel - 同时查找和替换公式的多个部分

时间:2017-10-14 19:23:44

标签: excel

首先发帖,请善待:)

我正在通过将上一年(2015年)的计算重复到最近一年的数据(2016年)来更新数据集。我已将旧年的公式复制到新列中,我只需要更改每个公式的几个部分。

实施例

  

2015公式:= COUNTIFS( Data15 [标题],数据表!$ B $ 2,    Data15 [变量 2015 ],"变量", Data15 [variable2 2015 ],& #34;< = 100&#34)

     

2016公式:= COUNTIFS( Data16 [标题],数据表!$ B $ 2,    Data16 [变量 2016 ],"变量", Data16 [variable2 2016 ],& #34;< = 100&#34)

我只需更改公式的两部分:Data15 - > Data16,2015 - > 2016.有数百个这些公式要更新,我可以手动进入并更新公式的这些小部分。对于所有公式,同时查找和替换公式的部分要快得多。但是 - 据我所知 - 查找和替换只允许您一次替换一件事(即Data15 - > Data16 OR 2015 - > 2016)。我试图更换一个,然后更换另一个,但公式中断,除非它们都被替换在一起。

问题:在Excel中,有没有办法同时查找和替换公式的多个部分?基本上,我想要替换Data15 - >数据16和2015 - > 2016年在同一个查找和替换中,用于一批单元格。那可能吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

这是一个宏和说明:

Sub FixFormulas()
    Dim r As Range, rng As Range
    Dim s As String

    Set rng = Cells.SpecialCells(xlCellTypeFormulas)
    For Each r In rng
        r.Value = "'" & r.Formula
        r.Replace what:="2015", Replacement:="2016"
        r.Replace what:="Data15", Replacement:="Data16"
        r.Formula = r.Value
    Next r

End Sub

宏非常易于安装和使用:

  1. ALT-F11调出VBE窗口
  2. ALT-I ALT-M打开了一个新模块
  3. 粘贴内容并关闭VBE窗口
  4. 如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

    删除宏:

    1. 按上述方式调出VBE窗口
    2. 清除代码
    3. 关闭VBE窗口
    4. 使用Excel工作表中的宏:

      1. ALT-F8
      2. 选择宏
      3. 触碰RUN
      4. 要了解有关宏的更多信息,请参阅:

        http://www.mvps.org/dmcritchie/excel/getstarted.htm

        http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

        必须启用宏才能使其生效!

        修改#1:

        弃掉之前的代码并改为使用:

        Sub FixFormulas2()
            Dim r As Range, rng As Range
            Dim s As String
        
            Set rng = Cells.SpecialCells(xlCellTypeFormulas)
            Set rng = Intersect(rng, Range("Z4:AA120"))
            For Each r In rng
                r.Value = "'" & r.Formula
                r.Replace what:="2015", Replacement:="2016"
                r.Replace what:="Data15", Replacement:="Data16"
                r.Formula = r.Value
            Next r
        
        End Sub
        

        (我们只添加一行代码)