セルのコピーとペーストについて説明です。
VBAでExcelを扱う際にコピー、ペーストはとても使用頻度が高いです。
コピーとペーストはセットで使用する事が多いので、セットで覚えましょう。
コピーの方法
記述方法
セルのコピーは「Copy」メソッドを使用します。
基本的に「Copy」メソッドでコピーして、 「Pastespecial 」メソッドで貼り付け方法を指定して貼り付けます。
範囲コピーするには「Range(“A1:J5”).Copy」「Range(Cells(1, 1), Cells(5, 10)).Copy」と記述します。
サンプルコード
単体のセルのコピーは下記の様に記述します。
Range("A1").Copy
Cells(1, 1).Copy
範囲をコピーするには下記の様に記述します。
Range("A1:J5").Copy
Range(Cells(1, 1), Cells(5, 10)).Copy
貼り付けの方法
記述方法
セルのペーストは「Pastespecial メソッド」を使用します。
定数を省略すると「すべて貼り付け」となります。
詳細な書式を指定して貼り付ける場合には、定数を指定して貼り付けをします。
サンプルコード
コピーしたデータを単一セルへ貼り付けるには下記の様に記述します 。
Range("B1").PasteSpecial
Cells(1, 2).PasteSpecial
コピーしたデータを複数セルへ貼り付けるには下記の様に記述します 。
Range("A10:J15").PasteSpecial
Range(Cells(1, 10), Cells(15, 10)).PasteSpecial
書式を指定して貼り付ける
コピーしたデータは「値のみ」や「数式」、「書式のみ」など貼り付ける形式を指定して貼り付けることが出来ます。
形式を指定して貼り付けるには「Pasteメソッド」を使用します。
形式を指定した貼り付け方法は次のように記述します。
Range("A1").PasteSpecial Paste:=xlPasteValues '値のみ貼り付け
Range("A1").PasteSpecial Paste:=xlPasteAll 'すべて貼り付け
Range("A1").PasteSpecial Paste:=xlPasteFormats '書式のみ貼り付け
貼り付ける形式一覧
貼り付ける形式を指定する定数の一覧です。
「Paste:=」の後ろに次の定数を指定することで形式を指定した貼り付けが可能です。
貼り付ける形式 | 定数 | 数値 |
すべて | xlPasteAll | -4104 |
数式 | xlPasteFormulas | -4123 |
値 | xlPasteValues | -4163 |
書式 | xlPasteFormats | -4122 |
コメント | xlPasteComments | -4144 |
入力規則 | xlPasteValidation | 6 |
罫線を除く全て | xlPasteAllExceptBorders | 7 |
列幅 | xlPasteColumnWidths | 8 |
数式と数値の書式 | xlPasteFormulasAndNumberFormats | 11 |
値と数値の書式 | xlPasteValuesAndNumberFormats | 12 |
コピー元のテーマを使用してすべて貼り付け | xlPasteAllUsingSourceTheme | 13 |
すべての結合されている条件付き書式 | xlPasteAllMergingConditionalFormats | 14 |
演算して貼り付ける
数値をコピーペーストする際に、値を加算や除算などの演算を加えて貼り付けする事が可能です。
演算をして貼り付けるには引数の「Operation」に次の定数を指定します。
引数「Operation」は省略可能です。
演算する場合は次のように記述します。
サンプルコード
cells(1,1)に10を入力して、コピーし、Cells(1,2)に加算貼り付けします。
Cells(1, 1) = 10
Cells(1, 1).Copy
Cells(1, 2).PasteSpecial Paste:=xlPasteAll, Operation:=xlPasteSpecialOperationAdd
演算の定数一覧
演算 | 定数 | 数値 |
しない | xlPasteSpecialOperationNone | -4142 |
加算 | xlPasteSpecialOperationAdd | 2 |
減算 | xlPasteSpecialOperationSubtract | 3 |
乗算 | xlPasteSpecialOperationMultiply | 4 |
除算 | xlPasteSpecialOperationDivide | 5 |
空白を無視して貼り付ける
セル範囲をまとめてコピーして、範囲を貼り付ける場合は空白を無視して貼り付ける事が出来ます。
空白を無視して貼り付ける場合は「SkipBlanks:=True」と指定します。
「 SkipBlanks 」は省略可能です。
サンプルコード
コードは次のように記述します。
Range(Cells(1, 1), Cells(5, 10)).Copy
Cells(10, 1).PasteSpecial Paste:=xlPasteAll, SkipBlanks:=True
行と列を入れ替えて貼り付ける
コピーした範囲の行と列を入れ替えて貼り付ける場合は、「Transpose:=True」と指定します。
「Transpose」は省略可能です。
サンプルコード
Range(Cells(1, 1), Cells(5, 3)).Copy
Cells(7, 1).PasteSpecial Paste:=xlPasteAll, Transpose:=True