如果单元格是特定值,则使用Excel宏快速替换文本

时间:2013-11-26 20:33:52

标签: excel vba

我有一个宏来查找excel电子表格中N列中的所有行,其值为'Accept',并将其值调整为'Reject'。

我的宏工作正常,但它工作非常慢,它花了我超过15分钟让我的宏运行20,000多行,将单元格值从Accept更改为Reject,这也是我渴望任何客户等待(20,000是我期望客户拥有多少行数据的高端)。

以下是我的宏中的代码,我想知道是否有人有任何想法如何让它运行得更快。

' 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

3 个答案:

答案 0 :(得分:2)

感谢所有帮助人员。我使用了你们发布的一些链接和代码(特别是Doug Glancy在评论中发布的链接,希望我可以选择评论作为接受的答案)来提出一些几乎可以即时运行的新代码。对于任何对它如何工作感兴趣的人来说,这是新的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

答案 1 :(得分:0)

以下对我来说非常快:

具有需要替换值的宏选区域/范围。

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

答案 2 :(得分:0)

试试这个:

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