为了速度,在一个避免循环的范围内更改值

时间:2015-03-26 20:26:33

标签: excel vba loops excel-vba find

我有以下代码非常慢。关于如何加快速度的任何想法?

一些背景,在之前的Sub中我拍了一个范围,然后复制并粘贴它。现在我需要根据代码更改值。是否有可能采用这个范围并对其进行修改而不先粘贴它?

Sub ChangeArea()
    Dim Book As Workbook
    Dim Sheet As Worksheet
    Dim AreaRange As Range
    Dim LastRow
    Dim c As Range
    Set Book = Workbooks("Testing")
    Set Sheet = Book.Worksheets("Data")
    Sheet.Activate
    LastRow = Sheet.Cells(Rows.Count, "AG").End(xlUp).Row
    Set AreaRange = Sheet.Range("AG5:AG" & LastRow)
    For Each c In AreaRange.Cells
        If c.Value = "10" Then
            c.Value = "Mark"
        ElseIf c.Value = "will" Then
            c.Value = "William"
        ElseIf c.Value = "Uncle" Then
            c.Value = "Bill"
        ElseIf c.Value = "Roomate" Then
            c.Value = "Robert"
        Else: End If
    Next
End Sub

2 个答案:

答案 0 :(得分:5)

选项可能是在您的范围内使用Replace方法。请参阅下文并尝试适应您的工作表。

Sub ChangeThem()
    Dim rng As Range
    Dim lRow As Long

    lRow = Sheet1.Cells(Rows.Count, "AG").End(xlUp).Row
    Set rng = Sheet1.Range("AG5:AG" & lRow)

    rng.Replace what:=1, replacement:="One"
    rng.Replace what:=2, replacement:="Two"
    rng.Replace what:=3, replacement:="Three"
End Sub

答案 1 :(得分:3)

尝试添加

Application.ScreenUpdating = false

到顶部

Application.ScreenUpdating = True

到底部

这样可以防止屏幕在每次更改时都更新。