2017-10-14 33 views
3

第一次发帖,请善待:)Excel中 - 查找和替换式的多个部分同时

我重复从去年(2015年)计算至最近一年的数据(2016)更新的数据集。我已将旧年公式复制到新栏中,我只需更改每个公式的几个部分。

2015公式:!= COUNTIFS(DATA15 [标题],数据表$ B $ 2, DATA15 [可变], “可变”,DATA15 [variable2 ],“< = 100”)

2016公式:= COUNTIFS (DATA16 [标题],数据表!$ B $ 2, DATA16 [可变], “可变”,DATA16 [变量2 ], “< = 100”)

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

问题:在Excel中,是否有方法可以同时查找和替换公式的多个部分?本质上,我想在同一个查找和替换中为一批单元替换Data15 - > Data16和2015 - > 2016。那可能吗?

谢谢!

+0

你能禁用计算,然后做两个连续的查找和替换? –

+0

我已将计算选项更改为手动(https://www.extendoffice.com/documents/excel/1564-excel-stop-auto-calculation.html),但它仍然无法替代时间 – Anthony

+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窗口

如果保存工作簿,宏将与其一起保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件保存为.xlsm而非 。XLSX

要删除宏:

  1. 弹出VBE窗口如上
  2. 清晰的代码进行
  3. 关闭VBE窗口

要从Excel中使用宏工作表:

  1. ALT-F8
  2. 选择宏
  3. 触摸RUN

要了解更多关于一般的宏,请参阅:

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 

(我们只添加一个单一的代码行)

+1

也许更好使用临时变量替换公式 – Slai

+0

@Slai这会更快,但我希望让代码更直观。 –

+0

@加里的学生 - 谢谢你!一个简单的问题 - 是否有办法将它仅应用于特定的单元格,而不是整个选项卡? – Anthony