Excel 如何使我的代码更快?(复制列)

Excel 如何使我的代码更快?(复制列),excel,vba,Excel,Vba,我是vba新手,写了下面的代码来匹配和复制列;我正试图找出如何使它更有效,因为它需要一些时间才能大量产出。任何建议或反馈都将不胜感激!我曾想过将屏幕更新切换为false,但这并没有真正加快速度。它会很慢吗?因为我使用的是过滤细胞的自动过滤方法?先谢谢你 Sub GetItems() Dim cel As Range Dim celAddress As Range Dim n As Integer Dim SelRange As Range Dim Bran

我是vba新手,写了下面的代码来匹配和复制列;我正试图找出如何使它更有效,因为它需要一些时间才能大量产出。任何建议或反馈都将不胜感激!我曾想过将屏幕更新切换为false,但这并没有真正加快速度。它会很慢吗?因为我使用的是过滤细胞的自动过滤方法?先谢谢你

Sub GetItems()
    Dim cel As Range
    Dim celAddress As Range
    Dim n As Integer
    Dim SelRange As Range
    Dim BrandsPasteLoc As Range

    n = 1

    'Application.ScreenUpdating = False

    Worksheets("CA").Activate
    ActiveSheet.Range("$A$1:$L$2622").AutoFilter Field:=10, Criteria1:="<>#N/A", 
    Criteria2:="<>0", Operator:=xlFilterValues

    Worksheets("Items to push to CA").Activate

    For Each cel In Range("A1:O1")
        Brand = cel.Value
        If Brand = "" Then
            Resume Next
        End If
        Worksheets("CA").Activate
        Application.Workbooks("Items Suggestion_CA").Worksheets("MY").Range("$A$1:$M$3959").AutoFilter Field:=5, Criteria1:=Brand, Operator:=xlFilterValues


        Range("B:B").Sort _
           Key1:=Range("b1"), Order1:=xlDescending     'sorts on Quantity

        Columns("A:A").Select
        Selection.SpecialCells(xlCellTypeVisible).Select
        Selection.Copy
        Sheets("Items to push to CA").Select
        Set SelRange = ActiveSheet.Columns(n)
        Set BrandsPasteLoc = Range(Range("A1:Z1").Find(Brand).Offset(1), Range("A1:Z1").Find(Brand).Offset(1).End(xlDown))
        BrandsPasteLoc.Select
        ActiveSheet.Paste
        Worksheets(“CA”).Activate
        n = n + 1
    Next cel

    Worksheets("Items to push to CA").Rows(2).Delete

    Worksheets("Items to push to CA").Activate
    Columns("A:O").Select
    Selection.EntireColumn.AutoFit
    Worksheets("Items to push to CA").Rows(60 & ":" & 
    Sheet1.Rows.Count).ClearContents

    Worksheets("CA").Activate
    Cells.AutoFilter

    Worksheets("Items to push to CA").Activate

    'Application.ScreenUpdating = True
End Sub
Sub-GetItems()
暗淡的cel As范围
地址范围
作为整数的Dim n
变暗SELRANGAS范围
Dim BrandsPasteLoc As系列
n=1
'Application.ScreenUpdate=False
工作表(“CA”)。激活
ActiveSheet.Range(“$A$1:$L$2622”)。自动筛选字段:=10,标准1:=“#不适用”,
准则2:=“0”,运算符:=xlFilterValues
工作表(“要推送到CA的项目”)。激活
对于范围内的每个cel(“A1:O1”)
品牌=细胞价值
如果Brand=”“,则
下一步继续
如果结束
工作表(“CA”)。激活
Application.Workbook(“Items Suggestion_CA”).工作表(“MY”).范围($A$1:$M$3959”).自动筛选字段:=5,标准1:=品牌,运算符:=XLFilterValue
范围(“B:B”)。排序_
Key1:=范围(“b1”),Order1:=xlDescending'按数量排序
列(“A:A”)。选择
Selection.SpecialCells(xlCellTypeVisible)。选择
选择,复制
工作表(“要推送到CA的项目”)。选择
Set SelRange=ActiveSheet.Columns(n)
设置BrandsPasteLoc=范围(范围(“A1:Z1”)。查找(品牌)。偏移量(1),范围(“A1:Z1”)。查找(品牌)。偏移量(1)。结束(xlDown))
BrandsPasteLoc.Select
活动表。粘贴
工作表(“CA”)。激活
n=n+1
下一个细胞
工作表(“要推送到CA的项目”)。第(2)行。删除
工作表(“要推送到CA的项目”)。激活
列(“A:O”)。选择
Selection.EntireColumn.AutoFit
工作表(“要推送到CA的项目”)。行(60&“:”&
Sheet1.行.计数).ClearContents
工作表(“CA”)。激活
自动过滤器
工作表(“要推送到CA的项目”)。激活
'Application.ScreenUpdating=True
端接头

此问题更适用于,但请尝试添加
应用程序。当sub启动时,ScreenUpdate=False
应用程序。当tue sub结束时,ScreenUpdate=True
。激活、.Select和AutoFilter非常缓慢。在复制到目标位置之前,尝试将范围更改为数组并执行操作,并使用一些更智能的搜索算法。这至少可以将速度提高几倍。

首先,避免使用
。激活
。选择
。选择
:这更适合感谢您的反馈:)我没有投反对票,但OP指的是屏幕更新没有任何影响,奇怪的是,屏幕更新为false,但它并没有真正加快速度绝对正确。我没有正确地阅读这个问题。我的错。