目次

copy and paste

今回は、セル範囲をコピーして貼り付けを行うマクロを作成してみました。値のみ、書式のみの貼り付けもテストしてみました。

目次まで戻る

題材

題材として「Book1.xls」の「Sheet1」に、以下の画像のようなデータを準備しました。「A1:B3」の背景が黄色に着色されていて、文字が入力されています。

「Book1.xls」の「Sheet1」の「A1:B3」
「Book1.xls」の「Sheet1」の「A1:B3」

目次まで戻る

マクロの一例

題材の「A1:B3」の範囲をコピーして「C1」セルに貼り付けるマクロを作成してみました。「Sheet1」上で実行してみます。

Sub A1B3をコピーしてC1に貼り付け()
    Range("A1:B3").Copy Range("C1")
End Sub

上記マクロを実行してみると、「C1:D3」の範囲にデータがコピーされました。

「C1:D3」の範囲にデータがコピーされている。
「C1:D3」の範囲にデータがコピーされている。

目次まで戻る

Pasteメソッド

Copy メソッドで「A1:B3」の範囲をコピーして、 Paste メソッドで「C4」セルに貼り付けるマクロも作成してみました。一例目のマクロに続けて実行してみます。

Sub CopyしてPasteメソッド()
Range("A1:B3").Copy
ActiveSheet.Paste Range("C4")
End Sub

上記マクロを実行してみると、「C4」セルにデータがコピーされました。一例目のマクロの時と違って「A1:B3」の範囲の外枠が破線になって点滅しています。

「Ctrl+C」キーを押した時と同じ動作になっているようです。この時の状態を「コピーモード」になっているというらしいです。

「C4」セルにデータがコピーされて、コピー元の範囲の外枠が点滅している。
「C4」セルにデータがコピーされて、コピー元の範囲の外枠が点滅している。

ExcelVBA の「CutCopyMode」プロパティでコピーモードまたは切り取りモードになっているかどうかを取得出来るようです。

コピー元範囲の外枠が点滅している状態で下記マクロを実行してみます。

Sub CutCopyMode取得()
Debug.Print Application.CutCopyMode
End Sub

上記マクロを実行してみると、 VBE のイミディエイトウィンドウに「1」と出力されました。

CutCopyMode プロパティが返す「1」はコピーモードになっている事を示すようです。

1

「CutCopyMode = False」とすると、コピーモードを解除出来るようです。マウス、キーボードのユーザーの操作では「Esc」キーでも解除出来ると思います。

Sub コピーモード解除()
    Application.CutCopyMode = False
End Sub

上記マクロを実行してみると、「A1:B3」の外枠の点滅が解除されました。

外枠の点滅が解除されている。
外枠の点滅が解除されている。

目次まで戻る

値のみ貼り付け

次は「値」のみ貼り付けをマクロで行ってみたいと思います。

マウス、キーボードのユーザーの操作で「形式を選択して貼り付け」ダイアログを表示して、「値」のみの指定を行うのと同様の動作になると思います。

「形式を選択して貼り付け」ダイアログで「値」が指定されている。
「形式を選択して貼り付け」ダイアログで「値」が指定されている。

「A1:B3」の範囲の値のみを「C7」に貼り付ける下記マクロを実行してみます。 PasteSpecial メソッドの Paste パラメーターに「xlPasteValues」を指定しています。

Sub 値のみ貼り付け()
Range("A1:B3").Copy
Range("C7").PasteSpecial xlPasteValues
Application.CutCopyMode = False
End Sub

上記マクロを実行してみると、「C7:D9」の範囲に値のみコピーされました。

値のみコピーされている。
値のみコピーされている。

目次まで戻る

書式のみ貼り付け

「A1:B3」の範囲の書式のみを「C10」に貼り付ける下記マクロも実行してみます。「xlPasteFormats」を指定しています。

Sub 書式のみ貼り付け()
Range("A1:B3").Copy
Range("C10").PasteSpecial xlPasteFormats
Application.CutCopyMode = False
End Sub

上記マクロを実行してみると、黄色の着色のみコピーされました。

書式のみ貼り付けられている。
書式のみ貼り付けられている。

目次まで戻る

行列を入れ替える貼り付け

「行列を入れ替える」を貼り付けも行ってみたいと思います。ユーザーの操作で 
「行列を入れ替える」にチェックを入れた場合と同様の結果になると思います。

「行列を入れ替える」にチェックが入っている。
「行列を入れ替える」にチェックが入っている。

「Transpose」パラメーターを「True」にして貼り付けてみます。

Sub 行列を入れ替える貼り付け()
Range("A1:B3").Copy
Range("C13").PasteSpecial Transpose:=True
Application.CutCopyMode = False
End Sub

上記マクロを実行してみると、「C13:E14」の範囲に行列が入れ替わって貼り付けられました。

行列が入れ替わって貼り付けられている。
行列が入れ替わって貼り付けられている。

「Paste」と「Transpose」パラメーターを両方指定して、値のみコピーして行列を入れ替えるマクロも作成してみました。

Sub 値のみコピーして行列を入れ替える()
Range("A1:B3").Copy
Range("C15").PasteSpecial Paste:=xlPasteValues, Transpose:=True
Application.CutCopyMode = False
End Sub

上記マクロを実行してみると、「C15:E16」の範囲に値のみが行列が入れ替わって貼り付けられました。

値のみがコピーされて、行列が入れ替わっている。
値のみがコピーされて、行列が入れ替わっている。

目次まで戻る

テスト環境

  • Windows 10(64 ビット)
  • Microsoft Office Excel 2003

以上、閲覧ありがとうございました。

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿