はじめに
Excel VBAでは、セルの内容や書式を他の場所へ複製・貼り付ける操作が頻繁に行われます。これを実現する基本的なメソッドが Copy
と PasteSpecial
です。
Copy
:範囲をコピーする(値、書式、数式など)PasteSpecial
:コピーした内容を選択的に貼り付ける(値のみ、書式のみなど)
この2つを組み合わせることで、柔軟かつ強力な貼り付け操作が可能となります。
1. Range.Copy メソッドの基本
■ 構文
Range("A1").Copy [Destination]
Destination
:貼り付け先の範囲(省略可能)
■ 主な使い方
● コピーして他の場所に貼り付け
Range("A1").Copy Destination:=Range("B1")
これは、A1の内容(値・書式)をB1にコピーします。
● コピー後に Paste する(クリップボードを経由)
Range("A1").Copy
Range("C1").PasteSpecial
※ PasteSpecial
を使わず ActiveSheet.Paste
を使うこともできます。
2. Range.PasteSpecial メソッドの基本
■ 構文
Range("B1").PasteSpecial [Paste], [Operation], [SkipBlanks], [Transpose]
■ 引数一覧
引数 | 説明 |
---|---|
Paste | 貼り付けの種類(例:xlPasteValues , xlPasteFormats など) |
Operation | 数学的演算(xlPasteSpecialOperationAdd など) |
SkipBlanks | 空白セルを無視するか |
Transpose | 行列を入れ替えて貼り付けるか |
3. よく使う Paste 種類の一覧
定数名 | 内容 |
---|---|
xlPasteAll | すべて貼り付け(デフォルト) |
xlPasteValues | 値のみ貼り付け |
xlPasteFormats | 書式のみ貼り付け |
xlPasteFormulas | 数式のみ貼り付け |
xlPasteComments | コメントのみ貼り付け |
xlPasteColumnWidths | 列幅の貼り付け |
4. 使用例
4.1 値だけをコピー
Range("A1").Copy
Range("B1").PasteSpecial Paste:=xlPasteValues
A1の値だけをB1に貼り付けます。書式や数式はコピーされません。
4.2 書式だけをコピー
Range("A1").Copy
Range("B1").PasteSpecial Paste:=xlPasteFormats
書式のみをコピーして、値は変更せずに見た目だけ一致させます。
4.3 数式だけをコピー
Range("A2").Copy
Range("B2").PasteSpecial Paste:=xlPasteFormulas
4.4 行と列を入れ替えて貼り付け(転置)
Range("A1:C2").Copy
Range("E1").PasteSpecial Transpose:=True
2行3列の表が、3行2列の表として貼り付けられます。
4.5 空白セルを飛ばして貼り付け
Range("A1:A5").Copy
Range("B1").PasteSpecial SkipBlanks:=True
空白セルは上書きせず、既存データを保持します。
5. 貼り付け操作の後処理(クリップボードの解放)
VBAで .Copy
を使うと、クリップボードにデータが残ります。操作後に以下のコードでクリップボードを解放できます。
Application.CutCopyMode = False
このコードを入れることで、コピー後の点線(点滅枠)も消え、見た目も整います。
6. Copy に Destination を使ったシンプルな方法
クリップボードを使わずに完結したい場合:
Range("A1").Copy Destination:=Range("C1")
これは Copy
と PasteSpecial
を同時に処理します。
7. 応用例
7.1 複数範囲の一括コピー(値のみ)
Range("A1:A5").Copy
Range("C1").PasteSpecial Paste:=xlPasteValues
7.2 特定条件の行だけコピー
If Range("A1").Value > 100 Then
Range("A1:E1").Copy
Range("A10").PasteSpecial Paste:=xlPasteValues
End If
8. よくあるエラーと注意点
エラー内容 | 対策方法 |
---|---|
PasteSpecial の直前に Copy が無い | 必ず .Copy を事前に呼び出す |
貼り付け先が非対応の形式 | Paste の種類を確認する |
シートをまたいだコピーでエラー | シートをアクティブにするか Destination を使う |
コピー後に点滅枠が消えない | Application.CutCopyMode = False を忘れずに |
9. まとめ:使い分けのポイント
方法 | 特徴 |
---|---|
Range("A1").Copy Destination:=... | クリップボードを使わない高速処理 |
Range("A1").Copy + PasteSpecial | 値や書式など貼り付けを細かく指定可能 |
PasteSpecial Paste:=xlPasteValues | 値のみ貼り付け。数式や書式は除外 |
PasteSpecial Transpose:=True | 行列の転置貼り付けに便利 |
SkipBlanks:=True | 空白を飛ばして既存データを残したまま貼り付け可 |