2015-08-31 44 views
2

我使用下面的代码来查找并替换Sheet1中存在的单词列表(COLA用于FIND单词,ColB用于替换单词),范围为A:H的Sheet2。它执行工作,但非常缓慢。这个脚本可以修改为更快运行吗?增强excel多个查找和替换脚本

Option Explicit 
Option Base 1 
Sub FindReplace() 
Dim LR&, Ctr& 
Dim ArrayInsen As Variant 
Application.ScreenUpdating = False 
With Sheets("Sheet1") 
    LR& = Cells(Rows.Count, "A").End(xlUp).Row 
    ArrayInsen = Worksheets("Sheet1").Range("A2:B" & LR&) 
End With 
With Sheets("Sheet2").Columns("A:H") 
    Application.DisplayAlerts = False 
    For Ctr& = LBound(ArrayInsen) To UBound(ArrayInsen) 
     .Replace What:=ArrayInsen(Ctr&, 1), Replacement:=ArrayInsen(Ctr&, 2), LookAt:=xlPart, _ 
      SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
      ReplaceFormat:=False 
    Next Ctr& 
    Application.DisplayAlerts = True 
End With 
Application.ScreenUpdating = True 
End Sub 

感谢有关此问题的任何帮助。

+0

您可以通过实际使用的范围调整“A:H”范围。 – Klaster

+1

是您要替换参与任何计算的值的单元格吗?如果是这样,将计算结果转换为手动@开始和返回到自动(或任何你设置的)在最后可能会有所帮助。数组中有多少个值? – sous2817

回答

2

难道你不能使用if语句而不是“查找/替换”函数通过数组来完成整个工作吗?例如,如果arr1是一个二维数组,其中arr1(i,1)中的查找值以及arr1(i,2)中的替换值,则只需比较范围内的值,即可快速循环将范围放入arr2。

sub replacement() 

dim arr1(), arr2() as variant 
dim i,j,k,m as long 

arr1=Range("A2:B") 
arr2=Range("...") 'the values you want to compare and replace 

for i=1 to num 'dimension of the 1st array 
    for j=1 to num2 'dimension of 2nd array 
     for k=1 to num3 '2nd dimension of arr2 
       if arr2(j,k)=arr1(i,1) then 
        arr2(j,k)=arr1(i,2) 
     next 
    next 
next 

然后在这里结束后将数组放入您想要的任何范围。

+1

就是这样,真正理解你的意见。节省宝贵的时间。现在我可以说它是邓恩:) –

+0

请注意,如果你想在字符串内寻找一组特定的字符,你必须使这个“IF”语句更有趣。 – Dunn

+1

这是正确的,但我实际上替换字符串(名称),因为它们。非常感谢您的迅速协助。 –