本期主要讲讲单元格复制粘贴等操作。

一、复制粘贴固定区域的单元格

因为以下内容都是复制单个或者固定区域的单元格内容,就不多说了,备注上面都有说明。

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

 

VBA中如何给单元格赋Empty值 vba单元格复制与粘贴方法_表名

从上面的图可以看出,新增了第15行张三点击运行后,仍然能正常复制过去。要复制的表如果有标题、有日期行,或者是筛选后的表格,仍然可以实现复制。

如果要复制的区域是一个表,就可以用以下方式(感觉更复杂了点,好像没啥实际用途)

第一,插入表格

VBA中如何给单元格赋Empty值 vba单元格复制与粘贴方法_ci_02

第二,重新命名,咱们插入表格之后,在设计——表名称那重命名一下,命名为Table111

VBA中如何给单元格赋Empty值 vba单元格复制与粘贴方法_ci_03

第三:这么操作就可以把表复制过去啦。

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