和風スパゲティのレシピ

日本語でコーディングするExcelVBA

セル範囲を図形を除いてコピーする - PasteSpecial

RangeオブジェクトのCopyメソッドを使用した場合は、
そのセル範囲にある図形までついてきてしまいます。

Dim コピー元範囲 As Range
Set コピー元範囲 = ThisWorkbook.Worksheets("○○").Range("A1:C3")

Dim コピー先セル As Range
Set コピー先セル = ThisWorkbook.Worksheets("○○").Range("E5")

コピー元範囲.Copy コピー先セル
' ↑このコードでは図形ごとコピーされてしまう

 
この解決策、実は簡単で、
以下のコードを実行するだけで図形以外のセル範囲だけをコピーすることが可能です。

Dim コピー元範囲 As Range
Set コピー元範囲 = ThisWorkbook.Worksheets("○○").Range("A1:C3")

Dim コピー先セル As Range
Set コピー先セル = ThisWorkbook.Worksheets("○○").Range("E1")

コピー元範囲.Copy
コピー先セル.PasteSpecial xlPasteAll ' 図形を除外して貼り付け

このコードは単純な「形式を選択して貼り付け⇒すべて」を行っているコードで、
実はこれだけで図形がコピーされなくなります。


これは実際のExcelでも同じ仕様になっており、
形式を選択して貼り付けダイアログで再現が可能です。
すべて で図形を除いて貼り付け


普通にExcelを使う上でも便利な機能ですので、
知らなかった方はこの機会に覚えておきましょう。