Sub test()
Dim Arr(1 To 6, 1 To 2), N%, I&, mTime, Rng As Range, Str$, Result$, ArrT
Arr(1, 1) = "A"
Arr(2, 1) = "B"
Arr(3, 1) = "C"
Arr(4, 1) = "D"
Arr(5, 1) = "E"
Arr(6, 1) = "F"
Arr(1, 2) = "H"
Arr(2, 2) = "I"
Arr(3, 2) = "J"
Arr(4, 2) = "K"
Arr(5, 2) = "L"
Arr(6, 2) = "M"
Columns(1).Clear
[a1:a10000] = "ABCDEFG"
Application.ScreenUpdating = False
mTime = Timer
'直接替换A列
For N = LBound(Arr) To UBound(Arr)
Columns(1).Replace Arr(N, 1), Arr(N, 2)
Next N
Result = "直接替换A列用时:" & Format(Timer - mTime, "0.000000") & vbNewLine
mTime = Timer
'直接替换A列已使用区
For N = LBound(Arr) To UBound(Arr)
Intersect(Columns(1), ActiveSheet.UsedRange).Replace Arr(N, 2), Arr(N, 1)
Next N
Result = Result & "直接替换A列已使用区用时:" & Format(Timer - mTime, "0.000000") & vbNewLine
mTime = Timer
'循环替换单元格
For Each Rng In [a1].Resize(Cells(Rows.Count, 1).End(3).Row)
Str = Rng.Value
For N = LBound(Arr) To UBound(Arr)
Str = Replace(Str, Arr(N, 1), Arr(N, 2))
Next N
Rng = Str
Next Rng
Result = Result & "循环替换单元格用时:" & Format(Timer - mTime, "0.000000") & vbNewLine
mTime = Timer
'读取到数组,经变量中转替换
ArrT = [a1].Resize(Cells(Rows.Count, 1).End(3).Row).Value
For I = LBound(ArrT) To UBound(ArrT)
Str = ArrT(I, 1)
For N = LBound(Arr) To UBound(Arr)
Str = Replace(Str, Arr(N, 2), Arr(N, 1))
Next N
ArrT(I, 1) = Str
Next I
[a1].Resize(Cells(Rows.Count, 1).End(3).Row).Value = ArrT
Result = Result & "数组经变量中转替换用时: " & Format(Timer - mTime, "0.000000") & vbNewLine
mTime = Timer
'读取到数组,不经变量中转替换
ArrT = [a1].Resize(Cells(Rows.Count, 1).End(3).Row).Value
For I = LBound(ArrT) To UBound(ArrT)
For N = LBound(Arr) To UBound(Arr)
ArrT(I, 1) = Replace(ArrT(I, 1), Arr(N, 1), Arr(N, 2))
Next N
Next I
[a1].Resize(Cells(Rows.Count, 1).End(3).Row).Value = ArrT
Result = Result & "数组不经变量中转替换用时:" & Format(Timer - mTime, "0.000000")
Application.ScreenUpdating = True
MsgBox Result
End Sub