Excel VBA 复制粘帖详解

Excel VBA 的复制粘帖功能是Excel常用的功能,如果仅仅只会用ctrl+c与ctrl+V,那就太浪费Excel的粘帖功能了,今天从VBA的角度来详细谈一下复制粘帖功能

我发布的《Excel VBA -单元格的操作(02)》里面介绍单元格的复制功能时,采用的代码如下:

Sub RangeCopy()

Application.DisplayAlerts = False

Sheet1.Range("A1").CurrentRegion.Copy Sheet2.Range("A1")

Application.DisplayAlerts = True

End Sub

其中第3行的代码,表示把Sheet1的内容复制到了Sheet2里面。它实现的功能仅仅相当于我们使用了ctrl+c与ctrl+V

但是Excle还有很强大选择性粘帖功能。如下图:

选择性粘帖的简介:

粘帖

【全部】:包括内容、和格式等,其效果等于直接粘贴;

【公式】:只粘帖文本和公式,不粘帖字体、格式(字体、对齐、文字方向、数字格式、底纹等)、边框、注释、内容校验等;(当复制公式时,单元格引用将根据所用引用类型而变化。如要使单元格引用保证不变,请使用绝对引用。)

【数值】:只粘帖文本,单元格的内容是计算公式的话只粘帖计算结果,这两项不改变目标单元格的格式;

【格式】:仅粘贴源单元格格式,但不能粘贴单元格的有效性,粘帖格式,包括字体,对齐,文字方向,边框,底纹等,不改变目标单元格的文字内容。(功能相当于格式刷);

【批注】:把源单元格的批注内容拷贝过来,不改变目标单元格的内容和格式;

【有效性验证】:将复制单元格的数据有效性规则粘贴到粘贴区域,只粘帖有效性验证内容,其他的保持不变;

【除边框外的所有内容和格式】:粘帖除边框外的所有内容和格式,保持目标单元格和源单元格相同的内容和格式;

【列宽】:将某个列宽或列的区域粘贴到另一个列或列的区域,使目标单元格和源单元格拥有同样的列宽,不改变内容和格式;

【公式和数字格式】:仅从选中的单元格粘贴公式和所有数字格式选项;

【值和数字格式】:仅从选中的单元格粘贴值和所有数字格式选项;

运算

【无】:对源区域,不参与运算,按所选择的粘贴方式粘贴;

【加】:把源区域内的值,与新区域相加,得到相加后的结果;

【减】:把源区域内的值,与新区域相减,得到相减后的结果;

【乘】:把源区域内的值,与新区域相乘,得到相加乘的结果;

【除】:把源区域内的值,与新区域相除,得到相除后的结果(此时如果源区域是0,那么结果就会显示#DIV/0!错误)

【跳过空白单元格】:当复制的源数据区域中有空单元格时,粘贴时空单元格不会替换粘贴区域对应单元格中的值;

【转置】:将被复制数据的列变成行,将行变成列。源数据区域的顶行将位于目标区域的最左列,而源数据区域的最左列将显示于目标区域的顶行;

选择性粘帖的 代码如下:

Sub 选择性粘帖()

Range("A1:E27").Select

Range("B3").Activate

Selection.Copy

Range("H1").Select

Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _

False, Transpose:=True

End Sub

代码运行的过程如下:

代码的第5行,就是选择性粘帖的代码:

Paste 是按照什么格式去粘帖,本例是全部

Operation 是表示粘帖之后是否运算,本例表示不运算

SkipBlanks 表示是否跳过空白单元格 Fales表示不跳过 True 表示跳过

Transpose 表示是否转置行与列 Fales表示不转置 True 表示转置

Past与Operation 的取值如下图:

PS 小技巧,大家不用单行记不住代码,当你需要用的时候,可以选着录制宏来找到你需要的代码。

选择性粘帖的重要那么大,大家快去试试吧!