【VBA】セルをコピーor切り取り&ペーストする方法と注意点

VBA

セルの値をコピーor切り取りをして別のセルにペースト(貼り付け)する方法についてケースごとに紹介していきます。

  • 単一セルのコピー(切り取り)&ペースト
  • 範囲指定をしてコピー(切り取り)&ペースト
  • 別シート
  • 別ブック

コピーまたは切り取り&ペースト(貼り付け)

コピーまたは切り取り&ペースト(貼り付け)の基本構文を紹介していきます。

コピー元や切り取り元については値を取得したいセル(単一セルまたは範囲)を指定する必要があります。

貼り付け先にも同様にセルを指定することでコピーまたは切り取り&ペースト(貼り付け)を行うことができます

セルをコピー&ペーストする構文

コピー元.Copy コピー先
※コードの見方
白・・・コード
紫・・・コメント
青・・・プロシージャの宣言
その他・・・コードを見やすくするために使うかも

.Copyとコピー先の間には半角スペースが必要ですということに注意

セルを切り取り&ペーストする構文

切り取り元.Cut 貼り付け先

コピーをする際と同様に.Cutと貼り付け先の間には半角スペースが必要です

単一セルを指定してコピー(切り取り)

1つのセルを指定してコピーまたは切り取りを行い、ペーストする先を指定して貼り付ける方法になります。

単一セルを指定してコピー&ペースト

Sub test()
 Range("B2").Copy Range("B4")
End Sub

B2セルに入力されている値をB4セルにコピー&ペーストしている。

単一セルを指定して切り取り&ペースト

Sub test()
 Range("B2").Cut Range("B4")
End Sub

B2セルに入力されている値をB4セルに 切り取り&ペースト している。

セルを範囲指定してコピー(切り取り)

セルを範囲指定してコピーまたは切り取りを行い、ペーストする先を指定して貼り付ける方法になります。

列を指定してコピー&ペースト

Sub test()
 Range("A:A").Copy Range("B:B")
End Sub

A列に入力されている値の全てをB列にコピー&ペーストしている。

before                  

after                   

セルを範囲指定して切り取り&ペースト

Sub test()
 Range("A2:C4").Cut Range("D2:F4")
End Sub

A2セルからC4セルの範囲に入力されている値の全てをD2セルからF4セルに 切り取り&ペースト している。

初期状態はA2セルからC4セルの範囲に値が入力されている

before                  

after                   

同一ブックの別シートへのコピー(切り取り)

同一ブックの別シートへのコピー(切り取り)&ペーストをする方法になります。別のシートに張り付ける場合には、これまでのようなセルの位置を指定するだけではなく貼り付け先のシート名を指定する必要があります

別のシートへコピー&ペースト

Sub test()
  Worksheets("シート名1").Range("A:A").Copy  _
  Worksheets("シート名2").Range("A:A")
End Sub

シート名1のA列にある値をシート名2のA列にコピー&ペーストしている

before                  

after                   

別のシートへ切り取り&ペースト

Sub test()
  Worksheets("シート名1").Range("A2:C4").Cut  _
  Worksheets("シート名2").Range("A2:C4")
End Sub

シート名1のA2セルからC4セルの範囲に入力されている値の全てをシート名2のA2セルからC4セルに 切り取り&ペースト している。

before                  

after                   

予備知識

CopyCutの後にある”_ “アンダーバーと半角スペースはVBAのコードを記述する際に改行を使用するための記述となります。この記述方法をすると改行していても同じ行のコードとして認識されます。今回はコードを見やすくするために利用しましたが実際のコードの記述をする際には利用しなくても問題ありません

別のブックへのコピー(切り取り)&ペースト

別のブックへのコピー(切り取り)&ペーストをする方法になります。別のブックに張り付ける場合には、シート名.セル名だけではなく、さらにブック名を指定する必要があります。

これまでとは記述量が増えるので必要な記述を確認していきましょう

別ブックに張り付ける際に新たに必要な処理

  • ブック名の指定
  • 貼り付け先ブックのパスの取得
  • 貼り付け先ブックを開く
  • 開いたブックを閉じる

別のブックへコピー&ペースト

Sub test()
  ActiveWorkbook.Worksheets("シート名").Range("A:A").Copy
  Workbooks.Open ("ファイルパス")
  Workbooks("貼り付け先ブック名").Worksheets("シート名").Range("A:A").PasteSpecial Paste:=xlPasteAll
  Workbooks("貼り付け先ブック名").Close SaveChanges:=True
End Sub

解説

①ActiveWorkbook.Worksheets(“シート名”).Range(“A:A”).Copy
今回のコードはコピー元のファイルに記述されているため、マクロ実行時にはアクティブな状態となっています。そのため、現在アクティブなブックを指定することができる“ActiveWorkbook”で取得元のファイルを指定してA列をコピーをしています。

コードを記述しているファイルが別のブックの場合にはこの記述は使用できないため、後述するコピー先のファイルを取得する方法と同様にファイル名を指定する必要があります。

②Workbooks.Open (“ファイルパス”)
コピー先のファイルパスを指定します。必ずファイル名を含めたフルパスで指定する必要があります。

③Workbooks(“貼り付け先ブック名”).Worksheets(“シート名”).Range(“A:A”).PasteSpecial Paste:=xlPasteAll
貼り付け先ブック名には拡張子(.xlsx)を含めたファイル名を指定します。PasteSpecialで指定した位置に張り付けすることができます。後述しますがPaste:=xlPasteAllは貼り付け時に利用できるオプションで張り付け方法(値のみ、すべてetc)を指定することができます。

④Workbooks(“貼り付け先ブック名”).Close SaveChanges:=True
貼り付けが完了したらブック名を指定してCloseでファイルを閉じます。その際にSaveChangesというオプションを利用して引数にTrueとしてあげることでファイルを保存して閉じることができます。ちなみにfalseと指定すると保存をせずにファイルを閉じることができます。

別のブックへ切り取り&ペースト

上記で説明したコピーと同じの為、詳細な説明は割愛します。
書き方は以下の通りで、Copyと記述していた部分をCutに変更するだけです。

Sub test()
  ActiveWorkbook.Worksheets("シート名").Range("A:A").Cut
  Workbooks.Open ("ファイルパス")
  Workbooks("貼り付け先ブック名").Worksheets("シート名").Range("A:A").PasteSpecial Paste:=xlPasteAll
  Workbooks("貼り付け先ブック名").Close SaveChanges:=True
End Sub

切り取り元ファイルの指定したシートのA列にある値を切り取って、貼り付け先ブックに貼り付けます

ペースト時の注意点と便利なオプション(引数)

ペースト時の注意点とペーストする際によく利用するオプションについて紹介していきます。

ペースト時の注意

コピーまたは切り取り元とペーストする先を指定する方法はCellsで指定してもRangeで指定しても問題はない。ただし、どちらか一方に統一する必要がある。

注意
  1. Range(“B2”).Cut Range(“B4”)
  2. × Cells(2,2).Cut Range(“B4”)

1.のコードでは切り取り元と貼り付け先をRangeで統一しているのでOK
2.では切り取り元をCellsで指定して、貼り付け先にはRangeを利用しているのでNG

ペースト時に利用できるオプション

ペーストする際にオプションを利用することで張り付け方法の形式を選択することができる。

オプションを利用するには、貼り付け先のセル指定の後に.PasteSpecial メソッドを付けることで複数のオプションを利用できる。

Range("A2").Cut Range("B2").PasteSpecial Paste:=
引数,Operation:=引数

オプションを複数指定する場合は上記のように(,)カンマで区切る必要があります。

利用できるオプション

下記オプションはすべて省略可能になっています。指定しなくても問題はありませんが、しっかりと貼り付け方を定義しておきたい場合は必要になります。

オプションできること

Paste
貼り付ける方法を指定する。(値のみ、書式のみ 等)
Operation貼り付け元と貼り付け先の値を計算して貼り付ける場合の計算方法を指定する

SkipBlanks
貼り付け時に空白セルを除外するかTrue/Falseで指定する
Transpose貼り付けj時にデータの行と列を入れ替える場合にTrue/Falseで指定する。

オプションPasteの使い方と引数

Pasteはセルの貼り付け方を指定します。主な引数は以下の通り。

引数 意味 使い方
xlPasteFormulas数式のみPaste:= xlPasteFormulas
xlPasteValues値のみPaste:= xlPasteValues
xlPasteFormats書式のみPaste:= xlPasteFormats
xlPasteValidation入力規則のみPaste:= xlPasteValidation
xlPasteColumnWidths列幅のみPaste:= xlPasteColumnWidths
xlPasteAllExceptBorders罫線を除く全てPaste:= xlPasteAllExceptBorders
xlPasteAll (初期値)全て(省略するとコレ)理由がなければ設定しなくてよし
Sub test()
 Range("A2").Copy Range("B2").PasteSpecial Paste:=  xlPasteValues 
End Sub

貼り付けの形式をオプションPasteを使用して引数にxlPasteValuesを設定することで、A2セルの値のみをB2セルにコピー&ペーストしている。

補足.1

プロパティ 書式 セル単体の指定 行の指定 列の指定 複数行の指定 複数列の指定 全セルを指定
Range  Range("列+行")  Range("A1")
セルA1を指定
 Range("1:1")
行1を指定
Range("A:A")
列Aを指定
Range("1:5")
行1~5を指定
Range("A:E")
列A~Eを指定
取得できない
cells Cells(行, 列) Cells(1,2)
セルB1を指定
取得できない 取得できない 取得できない 取得できない cells.select

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