複数セルのコピー&ペースト

中級VBA

はじめに

 セルのコピー&ペーストは値を貼り付ける際、様々なオプションが可能です。ただ注意点として、コピー範囲でセルの結合がある場合、問題が発生する場合があります。
 今回は、複数セルのコピー&ペーストを解説します。

複数セルのコピー&ペースト

 Sheet1にあるA1~D5までの範囲をSheet2にコピーするプログラムを示します。

Sub testCopy1()
    Worksheets("Sheet1").Range("A1:D5").Copy
    Worksheets("Sheet2").Range("B2").PasteSpecial
    Application.CutCopyMode = False
End Sub

 このプログラムでは、Sheet1にあるA1~D5までの範囲をSheet2のB2を起点にペーストします。
 値だけでなく書式設定も含めた全てがコピーされます。

 最後の Application.CutCopyMode = False はクリップボードに残った値を解除しています。

PasteSpecial メソッドのパラメーター

 貼り付けで使用したPasteSpecial メソッドは、Excelシート操作での「形式を選択して貼り付け」のオプションを指定できます。

   PasteSpecial (貼り付けタイプ , 貼り付け操作 , SkipBlanks , Transpose )

パラメータ内  容
貼り付けタイプ
 XlPasteType
xlPasteAll (全てを貼り付け)、xlPasteValues (値を貼り付け) など
貼り付け操作
 XlPasteSpecialOperation
コピーされたデータを貼り付け先で計算する(xlNoneとして使わない場合が多い)
SkipBlanksTrueにすると空白は貼り付けされません。既定値はFalse。
TransposeTrueにすると行列を入替えます。既定値はFalse。

 パラメーターは全て省略可能です。
 貼り付けで使用するパラメーターは、「マクロの記録」で実際に操作すれば調べる事ができて便利です。

Sub Macro1()
'
' Macro1 Macro
'

'
    Range("A1:D5").Select
    Selection.Copy
    Sheets("Sheet3").Select
    Range("B2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

マクロの記録を使って「値のみ」の貼り付けを行った例。PasteSpecial のパラメーターを確認できます。

セルの結合がある場合

 コピー元にセルが結合されている場合、コピー&ペーストはセルの結合も含めてコピーされます。
 貼り付け先の範囲にセルの結合が設定されていてコピー先とことなる場合は、エラーが発生します。

コピー元に結合セルがある場合

 図のように、コピー元の範囲でセルの結合が跨いでいる場合は、結合部分がカットされて貼り付けられます。

'コピー元に結合セルがあっても切り取られてペーストできる
Sub testCopy2()
    Worksheets("Sheet1").Range("B1:D4").Copy
    Worksheets("Sheet2").Range("B2").PasteSpecial
    Application.CutCopyMode = False
End Sub

 この場合、結合セルは左上のセルに値が残り、それ以外の場合は値は無くなります。

コピー先に結合セルがある場合

 図のように、コピー先の範囲でセルの結合が跨いでしまう場合は、エラーとなってしまいます。

Sub testCopy3()
    Worksheets("Sheet1").Range("A1:D5").Copy
    Worksheets("Sheet2").Range("B2").PasteSpecial   'エラー
    Application.CutCopyMode = False
End Sub

 このような事を避けるには、コピー先の範囲の結合セルを予め解除しておきます。
 結合セルの解除は、UnMerge メソッドを使います。

Sub testCopy4()
    Worksheets("Sheet2").Range("B2:E6").UnMerge  '結合セルの解除
    Worksheets("Sheet1").Range("A1:D5").Copy
    Worksheets("Sheet2").Range("B2").PasteSpecial
    Application.CutCopyMode = False
End Sub

まとめ

 貼り付けで使用する PasteSpecial メソッドのパラメーターは、「マクロの記録」で実際に操作すれば調べる事ができます。
 
 複数セルのコピー&ペーストでは、コピー元の結合セルに関しては問題ありませんが、コピー先の結合セルではエラーとなってしまいます。
 コピー先に結合セルがあると想定される場合は、UnMerge で’結合セルの解除をしておくと良いでしょう。

タイトルとURLをコピーしました