Excel VBAで値貼り付けをしたいときはないでしょうか。
けど、そんな中で悩むことは、
・Excel VBAでクリップボードを使用しないで値貼り付けしたいがわからない
ですよね。
今回はそんなお悩みを解決する
・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 | すべての結合されている条件付き書式 |
参照元:
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メソッド以外で値貼り付けをする方法について説明をします。
これまでご紹介した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でクリップボードを経由せずに直接値貼り付けする方法
についてまとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。
コメントを残す