本期主要讲讲单元格复制粘贴等操作。
一、复制粘贴固定区域的单元格
因为以下内容都是复制单个或者固定区域的单元格内容,就不多说了,备注上面都有说明。
Option Explicit
Sub CopyRange()
'复制单元格内容示例1
'注意:单元格的格式、公式、批注等也会被复制过去哟
Sheets(1).Range("A1").Copy Sheets(1).Range("B1")
End Sub
Sub CopyRange2()
'复制单元格内容示例2,打开了下面2个工作表后,就可以通过工作表的名称进行复制啦
Workbooks("测试表1.xlsx").Sheets(1).Range("A1").Copy _
Workbooks("测试表2.xlsx").Sheets(1).Range("A1")
End Sub
Sub CopyRange3()
'复制单元格内容示例3,和上面几乎一样
Dim rng1 As Range, rng2 As Range
Set rng1 = Workbooks("测试表1.xlsx").Sheets(1).Range("A1")
Set rng2 = Workbooks("测试表2.xlsx").Sheets(1).Range("A1")
rng1.Copy rng2
End Sub
Sub CopyRange4()
'复制单元格内容示例4,复制区域,选择一个单元格进行粘贴
Sheets(1).Range("A1:D5").Copy Sheets(2).Range("A1")
End Sub
Sub MoveRange1()
'移动(剪切)单元格内容示例1。
'注意:单元格的格式、公式、批注等也会被剪切过去哟
'就是把Copy换成了Cut,其他几乎一样
Sheets(1).Range("A1").Cut Sheets(1).Range("B1")
End Sub
二、复制粘贴可变单元格区域
上面主要是讲的特定区域的,下面讲讲会变动的区域。比如一张表新增了一行,复制区域就改变了,有没有什么比较方便的方式解决呢?
加个CurrentRegion就可以实现,用法如下。
Sub CopyCurrentRange()
'复制范围会变动的表格
Sheets(1).Range("A1").CurrentRegion.Copy Sheets(2).Range("A1")
End Sub
从上面的图可以看出,新增了第15行张三点击运行后,仍然能正常复制过去。要复制的表如果有标题、有日期行,或者是筛选后的表格,仍然可以实现复制。
如果要复制的区域是一个表,就可以用以下方式(感觉更复杂了点,好像没啥实际用途)
第一,插入表格
第二,重新命名,咱们插入表格之后,在设计——表名称那重命名一下,命名为Table111
第三:这么操作就可以把表复制过去啦。
Sub CopyTable()
Sheets(1).Range("table111").Copy Sheets(2).Range("A1")
End Sub
经过实际使用,发现确实不怎么方便,当然了还有Range的End方法,这个在7月29号的文档里用过。
Sub RangeEnd()
'从A10000往上数,遇到有数据的最下面一行
Debug.Print Sheets(1).Range("A10000").End(xlUp).Row
'从A1往下数,有数据的最下面一行
Debug.Print Sheets(1).Range("A1").End(xlDown).Row
'从Z1往左数,有数据的最右边一列
Debug.Print Sheets(1).Range("Z1").End(xlToLeft).Column
'从A1往右边数,有数据的最右边一列
Debug.Print Sheets(1).Range("A1").End(xlToRight).Column
End Sub
咱们表格范围是A1:D17大小的话,上面结果值分别为17,17,5,5。但是需要注意就是,选定单元格的那一行一列别有空值,不然返回的内容可能是空值附近的单元格哟。
三、调整单元格区域
用Range.Resize重新调整单元格区域,左边的参数是行数,右边的参数是列数。
另外需要注意的是,调整后的区域是从原来区域左上角开始框哟。
比如下面例子开始是框柱B2:D6,重新设置区域后,就从B2往下和往右算行列数。
Sub RangeResize()
Dim rng As Range
Set rng = Range("B2:D6")
Set rng = rng.Resize(8, 5)
End Sub