セルの値をコピー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
CopyやCutの後にある”_ “アンダーバーと半角スペースは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で指定しても問題はない。ただし、どちらか一方に統一する必要がある。
- 〇 Range(“B2”).Cut Range(“B4”)
- × 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 |