目次
copy and paste
今回は、セル範囲をコピーして貼り付けを行うマクロを作成してみました。値のみ、書式のみの貼り付けもテストしてみました。
題材
題材として「Book1.xls」の「Sheet1」に、以下の画像のようなデータを準備しました。「A1:B3」の背景が黄色に着色されていて、文字が入力されています。
マクロの一例
題材の「A1:B3」の範囲をコピーして「C1」セルに貼り付けるマクロを作成してみました。「Sheet1」上で実行してみます。
Sub A1B3をコピーしてC1に貼り付け()
Range("A1:B3").Copy Range("C1")
End Sub
上記マクロを実行してみると、「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」キーを押した時と同じ動作になっているようです。この時の状態を「コピーモード」になっているというらしいです。
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
以上、閲覧ありがとうございました。