我有一个宏来查找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
答案 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