如果单元格是特定值,则使用Excelmacros可以快速replace文本

我遇到了一个macros,在Excel电子表格的N列中find所有行,其值为“接受”,并将其值调整为“拒绝”。

我的macros正在工作,但它运行得非常慢,它实际上超过15分钟,我的macros运行超过20,000行更改单元格值从接受拒绝,这是太长,我期望任何客户等待20,000是我期望客户拥有多less行数据的高端)。

下面是我的macros代码,我想知道如果有人有任何想法,我可以使其运行得更快。

' Select cell N2, *first line of data*. Range("N2").Select ' Set Do loop to stop when an empty cell is reached. Do Until IsEmpty(ActiveCell) If ActiveCell.Value = "Accept" Then ActiveCell.Value = "Reject" End If ' Step down 1 row from present location. ActiveCell.Offset(1, 0).Select Loop 

感谢所有的帮助家伙。 我使用了你们发布的一些链接和代码(特别是Doug Glancy在评论中发布的链接,希望我可以select评论作为接受的答案),以提出一些几乎立即可用的新代码。 对于任何对它工作感兴趣的人,这里是新的VBA代码。

 Dim dat As Variant Dim rng As Range Dim i As Long Set rng = Range("N2:N" & ActiveSheet.UsedRange.Rows.Count) dat = rng ' dat is now array For i = LBound(dat, 1) To UBound(dat, 1) If dat(i, 1) = "Accept" Then dat(i, 1) = "Reject" End If Next rng = dat ' put new values back on sheet 

以下对我来说工作非常快:

具有需要replace值的macrosselect区域/范围。

Selection.Replace What:="Accept",Replacement:="Reject", LookAt:=xlPart, SearchOrder:=xlByRows,MatchCase:=True,SearchFormat:=False,ReplaceFormat:=False

尝试这个:

 Sub formatnumbers() Do Until IsEmpty(ActiveCell) ActiveCell.Select ActiveCell.Replace What:=ActiveCell.Value, Replacement:=ActiveCell.Value, LookAt:=xlPart, SearchOrder _ :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False ActiveCell.Offset(2000, 0).Select Loop End Sub