VBA专题02:使用代码进行复制操作

论坛 期权论坛 期权     
完美Excel   2019-6-9 21:27   4299   0
学习Excel技术,关注微信公众号:
excelperfect

在Excel工作表中,复制粘贴是最常用的操作之一。在已经输入的数据中,找到并复制想要的数据,然后粘贴到指定的地方,是再自然不过的操作了。或者从工作表的一个单元格区域复制到同一工作表中另外的单元格区域,或者从工作表的一个单元格区域复制到另一工作表中的单元格区域,甚至从工作表的一个单元格区域复制到不同工作簿中的工作表单元格区域。那么,如何使用VBA代码来实现复制粘贴操作呢?本文将介绍常用的一些代码。

直接赋值
如下图1所示,使用代码:
Range("D1:E2").Value= Range("A1:B2").Value
将单元格区域A1:B2中的值直接复制到单元格D1:E2中。


图1

使用Copy方法
也可以使用Copy方法,将单元格区域A1:B2中的值复制到以单元格D1开头的单元格区域中:
Range("A1:B2").CopyRange("D1")


图2

使用数组
如下图3所示,将工作表Sheet4的列A中内容为“完美Excel”的行复制到工作表Sheet5中。


图3

可以使用下面的代码:
Sub CopyDataByArray()
    Dim arr As Variant
    Dim i As Long
    Dim j As Long
    Dim row As Long
   
    row = 1
    arr =Sheet4.Range("A1").CurrentRegion.Value
   
    For i = LBound(arr) To UBound(arr)
        If arr(i, 1) = "完美Excel" Then
            For j = LBound(arr, 2) ToUBound(arr, 2)
                Sheet5.Cells(row, j).Value =arr(i, j)
            Next j
            row = row + 1
        End If
    Next i
End Sub

代码中,将工作表Sheet4中的数据存储到数组中。然后,判断数组中第1维的值是否为“完美Excel”并复制到工作表Sheet5中。注意,数组变量必须声明为Variant型。

使用For循环
使用For循环,也可以实现上图3的结果。代码如下:
Sub CopyDataByFor()
    Dim rng As Range
    Dim i As Long
    Dim j As Long
    Dim row As Long
      
    Set rng = Sheet4.Range("A1").CurrentRegion
    row = 1
   
    For i = 1 To rng.Rows.Count
        If rng(i, 1).Value = "完美Excel" Then
            For j = 1 To rng.Columns.Count
                Sheet5.Cells(row, j).Value =rng(i, j).Value
            Next j
            row = row + 1
        End If
    Next i
End Sub

使用自动筛选
使用自动筛选,不必使用很多次循环,也能实现上图3所示的结果。代码如下:
Sub CopyDataByAutoFilter()
    Dim rng As Range
   
    Set rng = Sheet4.Range("A1").CurrentRegion
   
    '删除已存在的筛选
    rng.AutoFilter
   
    '应用自动筛选
    rng.AutoFilter Field:=1, Criteria1:="完美Excel"
   
    '复制数据
    Sheet4.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy
    Sheet5.Range("A1").PasteSpecialxlPasteValues
   
    '删除筛选
    rng.AutoFilter
End Sub

使用高级筛选
高级筛选能够直接将满足条件的数据复制到指定的位置,但需要先指定条件。如下图4所示,工作表Sheet10中的单元格区域A1:B7为数据区域,单元格区域D1:D2为筛选条件,需要筛选出名称为“完美Excel”的数据至工作表Sheet11中。


图4

代码如下:
Sub CopyDataByAdvancedFilter()
    Dim wksData As Worksheet
    Dim wksFilter As Worksheet
    Dim rngData As Range
    Dim rngCriteria As Range
   
    Set wksData =ThisWorkbook.Worksheets("Sheet10")
    Set wksFilter =ThisWorkbook.Worksheets("Sheet11")
   
    '清空要放置复制数据的工作表
    wksFilter.Cells.Clear
   
    '删除已存在的筛选
    If wksData.FilterMode = True Then
        wksData.ShowAllData
    End If
   
    '获取数据区域
    Set rngData =wksData.Range("A1").CurrentRegion
   
    '条件区域
    Set rngCriteria =wksData.Range("D1:D2")
   
    '筛选并获取满足条件的数据
    rngData.AdvancedFilterAction:=xlFilterCopy, _
        CriteriaRange:=rngCriteria, _
       CopyToRange:=wksFilter.Range("A1")
End Sub

运行代码后的结果如下图5所示。


图5

高级筛选还可以处理多个条件,对于同一行中的条件关系为“AND”,对于不同行中的条件关系为“OR”。

提示
1. 在使用VBA代码进行复制操作时,我们不需要先选择想要复制的数据,也不需要选择或激活数据所在的工作表。

2. 在不同的工作表之间复制,或者在不同的工作簿之间复制时,在前面加上相应的工作表或工作簿名称。

3. 在复制前关闭Excel的某些功能,可以加速复制操作。一般,在复制代码前,使用下面的代码关闭相关的功能:
Application.Calculation =xlCalculationManual
Application.DisplayStatusBar =False
Application.EnableEvents =False
Application.ScreenUpdating =False

在复制代码完成后,再恢复相关的功能:
Application.Calculation =xlCalculationAutomatic
Application.DisplayStatusBar =True
Application.EnableEvents = True
Application.ScreenUpdating =True

相关文章链接:
Excel VBA解读(49):复制或剪切单元格——Copy方法与Cut方法
Excel VBA解读(52):自动筛选方法——AutoFilter方法
Excel VBA解读(53):高级筛选——AdvancedFilter方法


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:195
帖子:39
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP