Excel:我如何加快查找&;替换过程?每个工作簿更改32000个链接

Excel:我如何加快查找&;替换过程?每个工作簿更改32000个链接,excel,vba,formatting,Excel,Vba,Formatting,我比较了30多个类别的大量数据。每个类别工作簿都以自己独特的名称(类别)保存到“MyFolder”中。工作簿中的数据位于与类别名称相同的工作表上:[category.xls]CategoryYear\u Final 似乎最好创建一个引用数据并生成所需图形和布局的标准模板。一切都很顺利。是时候启动引擎,并通过修改参考名称为所有类别绘制图表了 使用“查找和替换”每个工作簿需要20分钟以上的时间,因为有32000多个位置(每个单元格两个)必须进行更新。哎呀 有没有关于如何更快地完成这项工作的建议,或者

我比较了30多个类别的大量数据。每个类别工作簿都以自己独特的名称(类别)保存到“MyFolder”中。工作簿中的数据位于与类别名称相同的工作表上:[category.xls]CategoryYear\u Final

似乎最好创建一个引用数据并生成所需图形和布局的标准模板。一切都很顺利。是时候启动引擎,并通过修改参考名称为所有类别绘制图表了

使用“查找和替换”每个工作簿需要20分钟以上的时间,因为有32000多个位置(每个单元格两个)必须进行更新。哎呀

有没有关于如何更快地完成这项工作的建议,或者我只需要花整整20个小时的时间看着Excel艰难地完成

非常感谢
Michael。

您可能需要禁用计算(如前所述),也可能需要禁用屏幕更新等其他功能。

要禁用计算:

如果您有Excel 2007或更高版本(带功能区):

  • 转到功能区菜单(左上角的圆圈)
  • 单击右下角附近的“Excel选项”
  • 单击“公式”类别
  • 在“计算选项”下,选择“手动”

    • 这就是我要做的。在执行更新之前:

      Application.EnableEvents = False
      Application.ScreenUpdating = False
      Application.Calculation = xlCalculationManual
      
      Application.EnableEvents = True
      Application.ScreenUpdating = True
      Application.Calculation = xlCalculationAutomatic
      Application.CalculateFull
      
      执行更新后:

      Application.EnableEvents = False
      Application.ScreenUpdating = False
      Application.Calculation = xlCalculationManual
      
      Application.EnableEvents = True
      Application.ScreenUpdating = True
      Application.Calculation = xlCalculationAutomatic
      Application.CalculateFull
      

      您可能希望确保,如果更新有问题,您会捕获错误并执行重新启用例程。例如,如果出现错误且未能重新启用Excel屏幕更新,则会使会话对用户不可用(尽管如果知道如何操作,可以通过VBA编辑器即时窗口进行修复)。

      在Excel 2010中工作。这太快了!在大约10秒内更换了851000件

      Sub Macro1()
      
          Application.EnableEvents = False
          Application.ScreenUpdating = False
          Application.Calculation = xlCalculationManual
      
          ' fill your range in here
          Range("E3:CN9254").Select
          ' choose what to search for and what to replace with here
          Selection.Replace What:="", Replacement:="0", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
      
          Application.EnableEvents = True
          Application.ScreenUpdating = True
          Application.Calculation = xlCalculationAutomatic
          Application.CalculateFull
      
      End Sub
      

      将计算设置为手动将没有帮助,编写VBA代码也没有帮助

      你唯一需要做的就是打开所有相关文件

      例如:
      假设您有3个文件:A、B和C。C从A收集信息,但现在希望从B获得信息

      您可以使用
      查找/替换
      更新链接

      解决方案是同时保持B和C的打开状态,这样它就能完美地工作

      乔恩·赫尔加森

      冰岛统计局

      基于excelly cellyson的代码,这里有一个我为自己制作的非常老练的宏。适用于Excel 2016(没有理由不适用于以前的版本)


      你能展示一下你所说的一些样本数据吗?您在这些单元格中有什么?您试图更改它们的目的是什么?我不太了解Excel,但是否有一个选项可以禁用立即重新计算?难以显示数据(相当敏感)。它有1610行深,10列长。单元格引用已对源类别文件执行的计算,以及%格式的计算方式。对不起,我再也帮不了你了。我要去试试禁用计算的诀窍。你必须在Excel中这样做吗?如果您将数据存储在Access中,在Access中进行计算,然后将其导出到Excel,该怎么办?我是为一位已经创建了大量国家数据Excel的同事而做的,现在我负责生成最终的Excel图表。因此,访问对我来说确实是一种可能,但我想让我的同事朝着这个方向努力。禁用计算,这是否意味着Excel在我再次启用计算之前不会更新图表?这是正确的;尽管您可以通过按F9键或单击“立即计算”(在公式栏上)强制计算。顺便说一句,计算选项也在公式栏上,我还没有意识到。我正准备发布相同的内容。很可能是图表的重画,而不是重新计算,使事情变得如此缓慢。作为VBA新手,您是否正在创建宏并将第一个代码块放入其中?然后是第二个宏和第二个代码块?使用第一个更新,然后使用第二个?错误处理将是:On Error GoTo。。。然后errHandler会弹出一条消息,允许我取消这个过程?我可能会有单独的子例程SwitchOff和SwitchOn,它们由Find/Replace宏调用。(Advanced Masterclass:我实际要做的是有一个特殊的EventSuppress类,它有一个startsuppress/killsuppress函数来完成所有这一切;如果发生错误并跳过了宏中在完成时调用killsuppress的位,则Terminate类也会调用killsuppress例程。这不是必需的,只是我现在的find/replace宏是我的右手食指和鼠标的方向感;)但如果我的宏技能对这项任务有帮助的话,我会努力学习。