相关文章推荐
坏坏的手术刀  ·  hive 启动问题记录 ...·  4 月前    · 
年轻有为的签字笔  ·  javascript - Unable ...·  11 月前    · 
魁梧的水煮鱼  ·  java - Cannot load ...·  1 年前    · 

除了在 Excel 中输入数据外,复制、粘贴、剪切等操作应该是最常用的操作了,要不然, Excel 界面的设计者为什么会把这几项功能放在最突出的位置呢?事实也确实是这样, Ribbon 界面的设计者在对用户使用的功能进行大量调查统计后,才确定了在界面中各功能的出现顺序。而剪切、复制、粘贴功能就是用户最经常使用的操作,因此才排在最前面。接下来,我们会分别介绍如何在 VBA 代码中实现单元格之间的复制、剪切、粘贴等功能。

先看看 Range 对象的 Copy 方法。执行下面的代码:

Range('A1').Copy

此时的工作表如下图所示:


在工作表中,单元格 A1 四周变成了流动的虚线框,表明单元格 A1 中的数据已经被复制到了剪贴板中。

执行下面的代码:

Range('A1').CopyRange('B3')

将单元格 A1 中的数据复制到单元格 B3 中,结果如下图所示:


由此,我们可以得出 Range 对象的 Copy 方法的语法为:

Range 对象 . Copy ( Destination )

说明:

  • Copy 方法将单元格或单元格区域复制到指定的单元格或单元格区域,或者复制到剪贴板。

  • 参数 Destination 为可选参数,指定要将数据复制到的新单元格区域。如果忽略该参数,则将单元格数据复制到剪贴板。

再来看看 Range 对象的 Cut 方法。在如下图左侧所示工作表中执行下面的代码:

Range('A1').Cut

其结果如下图右侧所示,即与 Copy 方法一样,单元格 A1 四周变成了流动的虚线框,表明单元格 A1 中的数据已经被复制到了剪贴板中。


执行下面的代码:

Range('A1').CutRange('B3')

则单元格 A1 中的数据被转移到了单元格 B3 中,如下图所示:


此时,单元格 A1 中的数据同时被清除。

由此,我们可以看出, Range 对象的 Cut 方法与 Copy 方法类似,其语法为:

Range 对象 . Cut ( Destination )

说明:

  • Cut 方法将单元格或单元格区域转移到指定的目标单元格或区域,或者剪贴板。

  • 参数 Destination 为可选参数,指定要将要粘贴数据的单元格区域。如果忽略该参数,则将单元格数据复制到剪贴板。

  • 数据被转移到指定单元格或区域中后,原单元格或区域中的数据被清除。

  • 所剪切的单元格区域必须由相邻的单元格组成。

Copy 方法和Cut方法的使用

当需要将单元格或单元格区域的副本放置到一个新的单元格或单元格区域,同时保留原来的单元格时,使用 Copy 方法。

当需要将单元格或单元格区域移动到一个新的单元格或单元格区域,同时删除原来的单元格时,使用 Cut 方法。

示例1:查找满足条件的数据并将相关数据复制到指定区域

如下图所示的工作表,左侧为数据区域,右侧为查找结果区域。要求在单元格 K1 中输入水果名称,运行程序后,在结果区域显示数据区域中相应水果的销售数据。


代码如下:

Sub FindAndCopy()

Dim lngDataLastRow As Long ' 数据区域最后使用的行

Dim lngFindLastRow As Long ' 查找结果区域最后使用的行

Dim strValue As String ' 要搜索的值

Dim strFirstRng As String ' 找到的第一个单元格

Dim rng As Range

Dim r As Long ' 用于增加行号

' 数据区域最后一行行号

lngDataLastRow = Range('A' &Rows.Count).End(xlUp).Row

' 结果区域最后一行行号

lngFindLastRow = Range('I' &Rows.Count).End(xlUp).Row

r = 1

' 清理结果区域

If lngFindLastRow > 2 Then

' 结果区域第 3 行及以下有数据则清除

Range('I3:N' &lngFindLastRow).Value = ''

' 结果区域最后一行行号

lngFindLastRow = Range('I'& Rows.Count).End(xlUp).Row

End If

' 要搜索的值位于单元格 K1

strValue = Range('K1').Value

' 将找到的第一个单元格赋值给变量

Set rng = Range('A2:F' &lngDataLastRow).Find(What:=strValue, LookAt:=xlWhole)

' 判断是否找到单元格

If Not rng Is Nothing Then

' 若找到则保存其地址

strFirstRng = rng.Address

Do

' 将找到的数据行复制到结果区域中

rng.Offset(0, -1).Resize(1, 6).CopyRange('I' & lngFindLastRow + r)

' 继续查找

Set rng = Range('A2:F'& lngDataLastRow).FindNext(After:=rng)

r = r + 1 ' 增加 1

' 如果找到且不是第一个单元格则继续

Loop While Not rng Is Nothing Andrng.Address <> strFirstRng

End If

End Sub

例如,在单元格 L1 中输入“苹果”,即查找数据区域中苹果销售的所有数据。运行代码后的结果如下图所示。


程序代码的意思详细代码中的注释。

示例2:复制特定的数据到指定区域

本例模仿 Bill Jelen 在《 VBA and Macros for Microsoft Excel 》中的示例。如下图所示,一次性将工作表中的数值(红色背景单元格)汇集到右侧以单元格 G1 开始的部分,而不是手动地一行一行地复制。


代码如下:

Sub CopyAreas()

Dim rngDest As Range

Dim rng As Range

' 设置要复制到的单元格

Set rngDest = Range('G1')

' 遍历工作表中存储常量数据的区域并将它们复制到新的位置

For Each rng InCells.SpecialCells(xlCellTypeConstants, 1).Areas

' 复制到新的区域

rng.Copy Destination:=rngDest

' 更新要复制到的单元格

Set rngDest =rngDest.Offset(rng.Rows.Count)

Next rng

End Sub

--------------------------------------

如果您对本文介绍的内容有什么建议或好的示例,欢迎发送邮件给我: xhdsxfjy@163.com

您也可以在本文下发表留言,留下您的足迹。

本文属原创文章,转载请联系我或者注明出处。

关注《完美 Excel 》微信公众账号:

  •