Excel VBAreplace为数组

现在我正在使用一种非常低效的replace函数的方式:

Dim Replacement As String Dim rngRepVal As Object Set rngRepVal = Sheets("data").Range(Cells(1, 3), Cells(intRowLast, 3)) Replacement = ActiveCell.Value rngRepVal.Replace What:="123", Replacement:="ABC", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False rngRepVal.Replace What:="234", Replacement:="ABC", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False rngRepVal.Replace What:="456", Replacement:="DEF", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False ... [goes on for 50 lines] Set rngRepVal = Nothing 

我想知道这是否可以用数组来实现。 就像是:

 Dim aWhat() As String Dim aReplacement() As String aWhat = Split("ABC|DEF|GHI|JKL", "|") aReplacement = Split(Array("123", 456")|Array("789","1000"), "|") '<-not sure how to organise this 

本质上123&456被ABC取代,789&1000被replace为replace循环中的DEF等>关于如何组织这两个数组的任何见解? 谢谢!

您的Replace是好的 – 它的单元格循环和select效率低下。 尝试这样的一次三个replace整个范围。

 Sub Recut() Dim rng1 As Range Set rng1 = Sheets("data").Range(Sheets("data").Cells(1, 3), Sheets("data").Cells(Rows.Count, 3).End(xlUp)) With rng1 .Replace What:="123", Replacement:="ABC", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False .Replace What:="234", Replacement:="ABC", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False .Replace What:="456", Replacement:="DEF", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False End With End Sub 

我会试试这个:

 aWhat=Split("ABC|ABC|DEF|DEF|GHI|GHI...","|") aReplacement=Split("123|456|789|.....","|") For i=1 to UBound(aWhat) rngRepVal.Replace what:=aWhat[i], Replacement:=aReplacement[i], .... Next i 

只要确保两个数组中都有相同数量的元素。

我觉得偶然发现:

 Dim aOld() As Variant Dim aNew() As Variant Dim Group As Variant Dim Word As Variant Dim y As Long aNew = Array("ABC", "DEF", "GHI", "JKL") aOld = Array(Array("123", "456"), Array("789", "1000")) With Range("A:A") For Each Group In aOld For Each Word In Group .Replace What:=Word, Replacement:=aNew(y), LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=False Next y = y + 1 Next End With