用新值replace所有工作表中的值

我有大约40个电子表格,每个包含高达30万行×93列(当前)。 这是大约11亿个数据点。 我需要检查每个单元格,然后确定单元格是否包含8个特殊字符之一,这些特殊字符在input电子表格时已经搞乱了。

这是一项需要每天运行多次的任务,以及其他一些步骤。 因此,我正在寻找一种方法来使用VBA来做到这一点。 我有以下代码:

Sub Hide_All_Sheets() Application.ScreenUpdating = False Application.DisplayAlerts = False Application.DisplayStatusBar = False Dim k As Integer Dim t As String Dim x As Integer k = Sheets.Count x = 1 While x <= k t = Sheets(x).Name If t = "Launch Screen" Or t = "Equiv sheet" Then x = x + 1 ElseIf t = "Summary_1" And Worksheets("Launch Screen").Range("N5") = "1" Then Sheets(x).Visible = True x = x + 1 Else Cells.Replace What:="ö", Replacement:=Chr(214), LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ ReplaceFormat:=False Cells.Replace What:="ü", Replacement:=Chr(220), LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ ReplaceFormat:=False Cells.Replace What:="ä", Replacement:=Chr(220), LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ ReplaceFormat:=False Cells.Replace What:="ß", Replacement:=Chr(223), LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ ReplaceFormat:=False Cells.Replace What:="è", Replacement:=Chr(200), LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ ReplaceFormat:=False Cells.Replace What:="Ü", Replacement:=Chr(223), LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ ReplaceFormat:=False Cells.Replace What:="Ä", Replacement:=Chr(223), LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ ReplaceFormat:=False Sheets(x).Visible = False x = x + 1 End If Wend End Sub 

唯一的问题是它将加载过程从20秒变成900秒。

我想知道有没有办法更快地做到这一点? 特别是如果有一种方法来运行手动CTRL-H过程,并replace所有电子表格,但使用VBA?

11亿个任务还有很多工作要做。 您的代码是有条不紊的,通过循环每个工作表广告,replaceinput中损坏的七个( 而不是 8个)特殊字符。

以下使用工作簿范围的方法来replace工作表集合中的循环。 这可能有助于保留要处理的信息的“负载”。

 Sub Repair_All_Worksheets() Dim fr As Long, FandR As Variant, vWSs As Variant appTGGL bTGGL:=False FandR = Array("ö", Chr(214), "ü", Chr(220), "ä", Chr(220), "ß", Chr(223), _ "è", Chr(200), "Ü", Chr(223), "Ä", Chr(223)) With ActiveWorkbook ReDim vWSs(1 To .Worksheets.Count) For fr = LBound(vWSs) To UBound(vWSs) vWSs(fr) = .Worksheets(fr).Name Next fr With .Worksheets(vWSs) .Select .Parent.Worksheets(vWSs(1)).Activate For fr = LBound(FandR) To UBound(FandR) Step 2 Cells.Replace What:=FandR(fr), Replacement:=FandR(fr + 1), LookAt:=xlPart Next fr End With End With appTGGL End Sub Public Sub appTGGL(Optional bTGGL As Boolean = True) Debug.Print Timer With Application .ScreenUpdating = bTGGL .EnableEvents = bTGGL .DisplayAlerts = bTGGL .Calculation = IIf(bTGGL, xlCalculationAutomatic, xlCalculationManual) End With End Sub 

Application.EnableEvents属性与其他环境variables一起被禁用。 Application.Calculation同样暂时被暂停到xlCalculationManual 。 这对具有易失性函数的工作表来说尤其重要,这里似乎并不是这样。

顺便说一句,当导入数据时,文本导入向导允许您在文件原始文本框的第一页指定代码页。 将其设置为正确的区域代码页(或可能只是65001:Unicode(UTF-8))应该修复您的导入。 Workbooks.OpenText方法有类似的选项。

XL查找和replace对话框允许我们在工作簿中“全部replace”。 您只需手动调用对话框,将search范围设置为“Workbook”,然后单击“查找下一个”。

现在,您不必遍历每张表来查找和replace。

Afaik这是设置XlSearchWithin.xlWithinWorkbook以确定FindReplacesearch范围的唯一方法。

在这里输入图像说明