【Excel VBA】Paste系メソッドで値貼り付けする方法!他の値貼り付け方法も!

Excel VBAで値貼り付けをしたいときはないでしょうか。

けど、そんな中で悩むことは、

・Excel VBAで値貼り付けをしたいがどのメソッドを使ってよいかわからない
・Excel VBAでクリップボードを使用しないで値貼り付けしたいがわからない

ですよね。

今回はそんなお悩みを解決する

・Excel VBAのPaste系メソッドで値貼り付けする方法
・Excel VBAでクリップボードを経由せずに直接値貼り付けする方法

についてまとめます!

Excel VBAで値貼り付けするPasteメソッドは?

Excel VBAの値貼り付けするメソッドの内容について説明をします。

まず、VBAにある貼り付けメソッドは2種類用意されています。
PasteメソッドPasteSpecialメソッドになります。
それぞれの構文や内容の違いについてみてみましょう。

Pasteメソッド

構文 Worksheet オブジェクト.paste(Destination, Link)
説明 指定された形式でクリップボードの内容をシートに貼り付けます。 値以外に書式や数式も含まれます。
Destination(省略可能):クリップボードのコンテンツを貼り付ける場所を指定する Range オブジェクト。 この引数を省略すると、現在の選択範囲に貼り付けられます。 この引数は、クリップボードの内容をセルに貼り付けられる場合に指定します。 この引数を指定すると、引数 Link は使用できません。
Link(省略可能):貼り付けたデータと元のデータの間にリンクを設定するには、 True を指定します。 この引数を指定すると、引数 Destination は指定できません。 既定値は False です。

PasteSpecialメソッド

構文 Rangeオブジェクト.PasteSpecial(Format, Link, DisplayAsIcon, IconFileName, IconIndex, IconLabel, NoHTMLFormatting)
説明 指定された形式で、クリップボードの内容をシートに貼り付けます。 パラメータ「Format」によりデータを貼り付ける形式を指定できます。
Format:クリップボードのデータの形式を文字列で指定します。
Link(省略可能):リンクを設定するには Trueを指定します。既定値は False です。
DisplayAsIcon(省略可能):True を指定すると、貼り付けデータがアイコンとして表示されます。 既定値は False です。
IconFileName(省略可能):DisplayAsIcon が True の場合に使用するアイコンを含 むファイルの名前 を指定します。
IconIndex(省略可能):アイコン ファイルのどのアイコンを使うかを示すインデックス番号を指定します。
IconLabel(省略可能):アイコンのラベルを文字列で指定します。
NoHTMLFormatting(省略可能):True を設定すると、HTML から書式設定、ハイパーリンク、およびイメージを削除します。 False を設定すると、HTML をそのまま貼り付けます。 既定値は False です。

パラメータ「Format」に指定できる値

プロパティ 貼り付け対象
xlPasteAll (規定値) 全て
xlPasteFormulas 数式
xlPasteValues
xlPasteFormats 書式
xlPasteFormulasAndNumberFormats 数式と数値の書式
xlPasteValuesAndNumberFormats 値と数値の書式
xlPasteValidation 入力規則
xlPasteComments コメント
xlPasteColumnWidths 列幅
xlPasteAllExceptBorders 罫線を除く全て
xlPasteAllUsingSourceTheme コピー元のテーマを使用してすべて貼り付け
xlPasteAllMergingConditionalFormats すべての結合されている条件付き書式

タカヒロ
タカヒロ
「xlPasteValues」か罫線だけが気になるようでしたら「xlPasteAllExceptBorders」でもよいですね。

参照元:
https://docs.microsoft.com/ja-jp/office/vba/api/excel.worksheet.paste
https://docs.microsoft.com/ja-jp/office/vba/api/excel.worksheet.pastespecial

構文からわかる通り、クリップボードにあるデータを張り付ける機能までは一緒ですが、今回実現したい値のみの貼り付けをする形式を指定できるメソッドはPasteSpecialメソッドのみとなります。

Pasteメソッドによる貼り付けの結果

値貼り付けでは不向きのPasteメソッドですが、Pasteメソッドで貼り付けた場合どのような結果になるか確認してみましょう。

まずはサンプル表を用意しましょう。

Pasteメソッドで表のコピペをするコード

Pasteメソッドで表のコピペをするコードは以下の通りです。

Sub Pasteメソッドで貼り付ける()
    Range("A1:C4").Copy
    Range("A7").Select
    ActiveSheet.Paste
    
    '範囲選択を解除します。
    Application.CutCopyMode = False
End Sub

“A1:C4″をコピーし、A7セルを基点に張り付けする内容となっています。

VBAを実装する

VBAの実装方法については
VBAの実装手順
をご参照ください。

VBAを実行する

VBAを実行してみましょう。

はい、説明の通り罫線やハイパーリングなど値以外の内容が含まれる形でコピペがされていることが確認できましたね。

PasteSpecialメソッドで値貼り付けをする

続いて、PasteSpecialメソッドを使い値貼り付けをしてみましょう。
PasteSpecialメソッドで値貼り付けを指定する方法はとてもカンタンです。
第一引数の「Format」に値貼り付けを意味する「xlPasteValues」を指定するだけです。

サンプルの表は前と同じものを使用します。

PasteSpecialメソッドで値貼り付けをするコード

PasteSpecialメソッドで値貼り付けをするコードは以下の通りです。

Sub PasteSpecialメソッドで値貼り付けをする()
    Range("A1:C4").Copy
    Range("A7").PasteSpecial Paste:=xlPasteValues
    
    '範囲選択を解除します。
    Application.CutCopyMode = False
End Sub

VBAを実行

VBAを実行してみましょう。

はい、元の表の値のみが貼り付けされていますね!

タカヒロ
タカヒロ
以下はPasteSpecialメソッドの使用例です。よろしければこちらもご参考ください。

PasteSpecialメソッド以外で値貼り付けをする

次はPasteSpecialメソッド以外で値貼り付けをする方法について説明をします。

これまでご紹介したPasteメソッドとPasteSpecialメソッドはクリップボードを経由して貼り付けを行いますので、クリップボードを他の作業で使っていたり、他プロセスでクリップボードを使用していたりすると意図しない内容が貼り付けられてしまうリスクが潜んでいました。

そこで、対策としてクリップボードを経由しないで、直接値を受け渡すように処理を変更していきます。
具体的にはコピー元のRangeオブジェクトを値貼り付けしたいRangeオブジェクトに直接代入するようにしていきます。

Rangeオブジェクトを直接代入し値貼り付けをするコード

Rangeオブジェクトを直接代入し値貼り付けと同じ結果を得るコードは以下の通りです。

Sub Rangeオブジェクトで貼り付ける()
    Range("A7:C10").Value = Range("A1:C4").Value
End Sub

タカヒロ
タカヒロ
めちゃくちゃシンプルなコードですね。

VBAを実行

VBAを実行してみましょう。

はい、こちらも元の表の値のみが貼り付けされていますね!

VBAの説明

“A1:C4″のセル範囲のValueプロパティでセルの値を参照し、同じくValueプロパティ指定でA7:C10セルへ代入しています。

Range("A7:C10").Value = Range("A1:C4").Value

タカヒロ
タカヒロ
参照元と参照先の行と列の件数は同じとなるようにしてください。

VBAの実装手順

実装手順は以下の通りです。

Excel側にVBAを実装していきます。

①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のVBAを入力します。

こちらで完了です。

VBAを実行する

では早速VBAの実行をしてみましょう。

①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。

さいごに

いかがでしょうか。

今回は、

・Excel VBAのPaste系メソッドで値貼り付けする方法
・Excel VBAでクリップボードを経由せずに直接値貼り付けする方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です