こんにちは、Ryoです。
ExcelVBAでデータを扱う際に読み書きは当然ですが、指定セルやセル範囲を切り取って別の指定位置に貼り付ける(移動する)ことを実施したいケースもあります。
今回はCut/Pasteメソッドを使い、移動する方法について書いてみたいと思います。
1.サンプル概要
先ず下の画像に示す表があるとします。
この表に対し、セルE4~F16の範囲を指定して切り取り、移動先(貼り付け位置)セルI4として実行すると、以下の様になります。
この動作のサンプルコードを以下に示します。
2.サンプルコード
以下サンプルコードは全てセル範囲を移動させる形で書いていますが、セル単体であればその様に指定すればOKです。(例:Cells(4, 5).Cut Destination:=Cells(4, 9)など)
◆Cutメソッド
Sub Sample1() 'セルE4~F16をセルI4を基点とする位置に移動 Range(Cells(4, 5), Cells(16, 6)).Cut Destination:=Cells(4, 9) End Sub
Cutメソッドを使う場合は、このようになります。
オブジェクト.Cut Destination:=貼り付け先
引数のDestinationには貼り付け先を指定するので、サンプルではDestination:=Cells(4, 9)と指定していますが、ここで注意すべきは既にデータが存在する場合に上書きされることになりますので、留意しておく必要があります。
又、同一Sheet内のみならず、別Sheetへの移動も可能です。
その場合は以下の様に記述します。
Sub Sample2() Range(Cells(4, 5), Cells(16, 6)).Cut Destination _ :=Worksheets("Sheet2").Cells(4, 2) 'Sheet2のセルB4を基点とする位置に移動 End Sub
引数Destinationの指定にワークシートも追加指定すればOKです。
これを実行すると、Sheet2のB4位置に移動されています。
◆Pasteメソッド
こちらもCutメソッドは同様に使うのですが、指定する際にPsateメソッドを使うこともできますので、以下にサンプルコードを示します。
私の個人的な考えですが、最初に書きましたCutメソッドを使ってDestinationで指定すれば事足りますから、私はこの使い方はほぼ実践してないですね。
Sub Sample3() Range(Cells(4, 5), Cells(16, 6)).Cut ActiveSheet.Paste Destination:=Cells(4, 9) End Sub
これも同様の結果になります。
3.まとめ
シート内にあるデータで特に加工なども必要なく、特定の場所に移動することで事足りる場合で例えば旧フォームのデータから新フォームに移行する場合に範囲を切り取って移動させるなど、知っていると役立つ場面も多いかと思います。
記述自体も簡単ですから直ぐに使えると思いますが、移動先は上書きされるということだけ注意してくださいね。(大事なことなのでもう一回言いました(笑))
以上、セルやセル範囲を切り取り、移動する方法についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo