形式を選択して貼り付け

セルを貼り付けるときに、書式だけをコピー元から貼りつけたい場合や値だけを貼りつけたい場合があります。このような場合には形式を指定して貼り付けを行います。ここでは Excel VBA を使って形式を選択して貼り付けを行う方法を解説します。

(Last modified: )

形式を選択して貼り付け

Excel で形式を選択して貼り付けを行う場合は、次のようなダイアログから形式を選択します。

形式を選択して貼り付け

Excelで貼り付けを行う場合にも「形式を選択して貼り付け」を行うと上記のようなウィンドウが表示されますが、これと同じことをVBA上で行うことが出来ます。

形式を選択して貼り付けを行う場合には、貼り付けたい場所にあるRangeオブジェクトに対して「PasteSpecial」メソッドを使います。(PasteメソッドはWorksheetオブジェクトに対してでしたが、PasteSpecialメソッドはRangeオブジェクトに対して行いますので注意して下さい)。

Range("A1").Copy

Range("B2").PasteSpecial Paste:=xlPasteAll, _
    Operation:=xlPasteSpecialOperationNone

まず「Paste」引数に何を貼り付けるかを指定します。設定可能な値は以下の通りです。

定数貼り付ける内容
xlPasteAllすべて
xlPasteFormulas数式
xlPasteValues
xlPasteFormats書式
xlPasteCommentsコメント
xlPasteValidation入力規則
xlPasteAllExceptBorders罫線を除くすべて
xlPasteColumnWidths列幅
xlPasteFormulasAndNumberFormats数式と数値の書式
xlPasteValuesAndNumberFormats値と数値の書式

省略した場合は「xlPasteAll」がデフォルトの値となります。

次に「Operation」引数に演算方法を指定します。設定可能な値は以下の通りです。

定数貼り付ける内容
xlPasteSpecialOperationNone演算をしない
xlPasteSpecialOperationAdd加算
xlPasteSpecialOperationSubtract減算
xlPasteSpecialOperationMultiply乗算
xlPasteSpecialOperationDivide除算

省略した場合は「xlPasteSpecialOperationNone」がデフォルトの値となります。

また「SkipBlanks」引数に「True」を設定すると、空白セルを無視して貼り付けが行われます。省略可能でデフォルトは「False」です。「Transpose」引数に「True」を指定すると行と列を入れ替えて貼り付けが行われます。省略可能でデフォルトは「False」です。

このようにExcelで指定可能な値にそれぞれ対応しています。(リンク貼り付けについては『セルのリンク貼り付け』を参照して下さい)。

サンプルプログラム

では簡単なサンプルで試してみましょう。

下記のようなExcelファイルを用意します。

形式を選択して貼り付け

表(セル範囲B2:C5)をまとめてコピーし、セルE2の位置へ書式だけを貼り付けます。

Sub テスト()

    Dim range1 As Range
        
    Set range1 = Range("B2:C5")
    range1.Copy
    
    Range("E2").PasteSpecial Paste:=xlPasteFormats
    
    Application.CutCopyMode = False

End Sub

上記マクロを実行すると次のようになります。

形式を選択して貼り付け

※見やすいように、貼り付け後に他のセルをクリックして選択を解除しています。

-- --

Excel VBA を使って形式を選択して貼り付けを行う方法を解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。