【Excel VBA】万能!クリップボードの情報を「形式を選択して」貼り付けるPasteSpecialメソッド

VBA上でコピーや切り取りしてクリップボードに格納された情報を形式を選択して貼り付けするにはPasteSpecialメソッドを使います。

所定の罫線などの書式を崩さずに貼り付けしたい場合などは「形式を選択して貼り付け」の機能は非常に便利なので、日常的に使う機能のひとつですね。

PasteSpecialメソッドの基本構文

Rangeオブジェクト.PasteSpecial(Paste,Operation,SkipBlanks,Transpose)

Rangeオブジェクト

Pasteメソッドを指定するRangeオブジェクトを指定します。

オブジェクトに関しては下記記事をご参照ください。

Excelのオブジェクトの基礎知識まとめ | Excelを制する者は人生を制す ~No Excel No Life~

引数Paste

クリップボードの情報を貼り付ける形式を指定できる引数です。

この引数は省略可能です。

省略した場合はクリップボードの情報をすべて貼り付けます。(Pasteメソッドと同じ)

引数Operation

クリップボードの情報で貼り付けする際に四則演算も合わせて行なうか指定できる引数です。

この引数は既定値が「演算をしない」となっており、省略可能です。

引数SkipBlanks

クリップボードの情報で貼り付けする際に「空白セルを無視する」かどうかを指定できる引数です。

この引数は既定値が「無視しない」となっており、省略可能です。

引数Transpose

クリップボードの情報で貼り付けする際に「行列を入れ替える」かどうかを指定できる引数です。

この引数は既定値が「入れ替えない」となっており、省略可能です。

使用例

今回は下記のようにB3:B7の範囲にあるセル情報をD3:D7の範囲に貼り付けるとします。

PasteSpecialメソッド①

引数Pasteの代表的な使用方法

PasteSpecialメソッド②

引数Pasteは、ワークシート上で「形式を選択して貼り付け」を行なう際に表示される「形式を選択して貼り付け」ダイアログの中の「貼り付け」メニューにある機能をすべて指定することができます。

この中からいくつか代表的な使い方をご紹介していきます。

【参考】値のみ貼り付けの場合

値のみ貼り付けの場合は以下のコードになります。

最初にコピー元となるB3:B7のセル範囲をCopyメソッドにてコピー。(2行目)

貼り付け先の起点となるD3セルを指定し、そのあとにPasteSpecial メソッドを記述。
そのあとに引数「Paste」として”Paste:=”のあとに「値のみ」を意味する定数「xlPasteValues」を記述で完了です。(3行目)

PasteSpecialメソッド③

B3:B7の情報がD3:D7へ値のみ貼り付けすることができました!

【参考】書式のみ貼り付けの場合

書式のみ貼り付けの場合は以下のコードになります。

値のみと異なるのは引数「Paste」の定数が「書式のみ」を意味する「xlPasteFormats」になっている点のみです。

PasteSpecialメソッド④

B3:B7の情報がD3:D7へ書式のみ貼り付けすることができました!

【参考】列幅のみ貼り付けの場合

若干マニアックですが、列幅のみ貼り付けの場合は以下のコードになります。

値のみと異なるのは引数「Paste」の定数が「列幅のみ」を意味する「xlPasteColumnWidths」になっている点のみです。

PasteSpecialメソッド⑤

B3:B7の情報がD3:D7(というよりはD列)へ列幅のみ貼り付けすることができました!

引数Pasteの定数一覧

上記で紹介したものも含めて引数Pasteの定数を以下の通りすべて一覧にしましたのでご参考になさってください。

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

【参考】引数Operationを指定する場合

引数Operationは、ワークシート上で「形式を選択して貼り付け」を行なう際に表示される「形式を選択して貼り付け」ダイアログの中の「演算」メニューにある機能をすべて指定することができます。

PasteSpecialメソッド⑥

たとえば、D3:D7の範囲にそれぞれ「2」という数値が入っていたとします。

ここにB3:B7の範囲の情報をD3:D7にもともと入っている値へ加算するとします。(値のみ貼り付け)

PasteSpecialメソッド⑦

その場合の以下のコードになります。

引数「Paste」の定数部分までは先述の通りです。
そのあとに,[カンマ]、そして引数「Operation」として”Operation:=”のあとに「加算」を意味する定数「xlPasteSpecialOperationAdd」を記述で完了です。(3行目)

PasteSpecialメソッド⑧

B3:B7の情報がD3:D7へ加算した上で値のみ貼り付けすることができました!

引数Operationの定数一覧

上記で紹介したものも含めて引数Operationの定数を以下の通りすべて一覧にしましたのでご参考になさってください。

しない xlPasteSpecialOperationNone(既定)
加算 xlPasteSpecialOperationAdd
減算 xlPasteSpecialOperationSubtract
乗算 xlPasteSpecialOperationMultiply
除算 xlPasteSpecialOperationDivide

【参考】引数SkipBlanksを指定する場合

引数SkipBlanksは、ワークシート上で「形式を選択して貼り付け」を行なう際に表示される「形式を選択して貼り付け」ダイアログの中の「空白セルを無視する」のチェック有無を指定することができます。

PasteSpecialメソッド⑨

たとえば、B4:B6が罫線のみでブランクだったとします。

B3:B7の範囲のブランクセルを除いたセルの書式だけをD3:D7へ貼り付けしたいとします。

PasteSpecialメソッド⑩

その場合の以下のコードになります。

引数「Paste」の定数部分までは先述の通りです。
そのあとに,[カンマ]、そして引数「SkipBlanks」として”SkipBlanks:=”のあとに「空白セルを無視する」を意味する定数「True」を記述で完了です。(3行目)

PasteSpecialメソッド⑪

D3セルとD7セルのみ書式を貼り付けすることができました!

【参考】引数Transposeを指定する場合

引数Transposeは、ワークシート上で「形式を選択して貼り付け」を行なう際に表示される「形式を選択して貼り付け」ダイアログの中の「行列を入れ替える」のチェック有無を指定することができます。

PasteSpecialメソッド⑫

行列を入れ替える場合は以下のコードになります。(値のみ貼り付け)

引数「Paste」の定数部分までは先述の通りです。
そのあとに,[カンマ]、そして引数「Transpose」として”Transpose:=”のあとに「行列を入れ替える」を意味する定数「True」を記述で完了です。(3行目)

PasteSpecialメソッド⑬

B3:B7の情報がD3:H3へ値のみ貼り付けすることができました!

まとめ

「形式を選択して貼り付け」はほんとうに応用できる場面が多いため、上記を参考にいろいろとコードを組んでみてみましょう。

なお、そんな便利なPasteSpecialメソッドですが、「形式を選択して貼り付け」ダイアログの左下にある「リンク貼り付け」だけはできませんのでご注意を。

もし、「リンク貼り付け」したい場合はPasteメソッドの引数Linkにて指定することができますので混同しないようにしましょう(・∀・)

【Excel VBA】クリップボードの情報を貼り付けるPasteメソッド | Excelを制する者は人生を制す ~No Excel No Life~

ご参考になれば幸いです(*^^*)


この記事が気に入ったら
いいね ! しよう

無料メルマガはじめました!(特典あり)

メールアドレスを登録すればブログではお伝えできない情報を無料で受信できます。
今なら特典として、サンプルファイルを無料でプレゼント中!
もっとエクセルをスキルアップしたい方は、ぜひご登録くださいm(__)m

ご案内

おすすめ記事