プチIT化

貼り付けオプションを複数適用したい場合のマクロサンプル

こんにちは、わたあめです。突然ですが、Excelでセルを右クリックし[形式を選択して貼り付け]という機能ありますよね。形式を選択することで、どのように貼り付けするかが選択出来ます。

しかし、1つのオプションのみ選択可で、複数のオプション内容を適用することはできません。(オプションを選びなおす事はできますが、最新で選んだオプションが反映される。)

例えば、元々数式が入っているセル範囲に対して、行列を入れ替えて数式でなく値をコピーするということはできません。具体的には、

  1. 数式でなく値のみ貼り付け
  2. 行列を入れ替えて貼り付け

1回の貼り付け操作で①か②のどちらかしか選択できません。それゆえ、手動で操作する場合、値のみ貼り付けした後、再びコピーして行列を入れ替えて貼り付けしなければなりません。

わたあめ
わたあめ
ちょっと手間だね!

今回は、同時にこのオプションを適用することができるのか?マクロで実行できそうだったので、マクロ組んでみました。サンプルマクロを紹介しています。それでは、いってみましょう!

貼り付けオプションを複数指定するマクロサンプル

貼り付けオプションを指定するには、PasteSpecialメソッドを利用します。

基本構文

コピー後、PasteSpecialメソッドを利用して貼り付ける場合の基本構文は以下です。

Range("セル").Copy
Range("セル").PasteSpecial(Paste, Operation, SkipBlanks, Transpose)

()かっこの部分は省略可能なオプションです。各オプションは、いろいろありますが、今回はわたあめがシーンを2つ想定して、サンプルコードを書きました。

セルの値のみ、書式を維持したままコピー

数式が入っているセルで、数式ではなくて値をコピー、さらに書式も維持して貼り付けしたい場合のサンプルコードです。

Sheets("シート名").Range("コピーセル範囲").Copy
Sheets("シート名").Range("貼付け起点セル").PasteSpecial xlPasteValues
Sheets("シート名").Range("コピーセル範囲").Copy
Sheets("シート名").Range("貼付け起点セル").PasteSpecial xlPasteFormats

Pasteオプションは1行で複数を同時に指定できないので、別々に指定しています。

セルの値のみ、行列を入れ替えてコピー

数式が入っているセルで、数式ではなくて値をコピー、さらに行列を入れ替えて貼り付けしたい場合のサンプルコードです。

Sheets("シート名").Range("コピーセル範囲").Copy
Sheets("シート名").Range("貼付け起点セル").PasteSpecial xlPasteValues, Transpose:=True

その他:貼付後の処理

貼り付け処理の後に書いておくと丁寧かな、と思う構文を紹介しておきます。

わたあめ
わたあめ
なくても困らないコードで、スッキリしたいがための個人的趣味コード!

コピーモード解除

マクロで貼り付け処理を行うと、貼り付けるデータ(元データ)のセル範囲が選択され、点滅されたたままとなっています。その点滅を解除するためのマクロです。

Application.CutCopyMode = False

コピーした範囲を解除しておくほうが良いです。解除しない場合、クリップボーにも値がコピーされた状態になるので、Ctrl+Vなどのショートカットキーでうっかり想定外なところに貼り付けてしまうこともあったりするので!

範囲解除

マクロで貼り付け処理を行うと、貼り付けたところのセル範囲が選択されたままになっています。(表丸ごと貼付だと、表全体が反転した色になっている)どこかのセルを選択しておいて、範囲選択を解除しておくと丁寧かなと思います。

貼り付け範囲の左上のセルを選択するコード。

ActiveCell.Select

Excelの左上(A1)を選択するコード。

Range("A1").select

さいごに

いかがだったでしょうか?手作業だとクリック数が多い操作も、マクロにしてしまえばワンクリックで終わったりしますよね。マクロ便利~。それでは、また!

flier(フライヤー)