【问题标题】:Change values within a range avoiding loops, for speed在避免循环的范围内更改值,以提高速度
【发布时间】:2015-05-31 01:00:54
【问题描述】:

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

一些背景,在以前的 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

【问题讨论】:

  • 您可以做的一件事是将最高频率的匹配放在首位。如果 Roomate 出现频率最高,则它应该是匹配的第一个测试。与第二次、第三次等最频繁的比赛相同。更改为 Select Case ... End Select 也可能会提高效率。

标签: vba loops excel find


【解决方案1】:

尝试添加

Application.ScreenUpdating = false

到顶部和

Application.ScreenUpdating = True

到底部

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

【讨论】:

    【解决方案2】:

    一个选项可能是在您的范围内使用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
    

    【讨论】:

    • 首先执行此操作,确保一切按预期工作,然后应用 Sobigen 的调整。
    猜你喜欢
    • 2017-07-04
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多