VBAでセルを選択し、選択したセルをコピペする方法のご紹介です。
もしExcelの基本的なコピーの仕方を知りたいという方は、下記記事をご参照ください。この記事はVBA的には基本的ですが、Excelとしてはあまり基本的ではないです。

また、VBAの使い方から知りたい方は下記をどうぞ。

まとめて記述する場合
まとめて書いたほうが簡単なので、こちらを先に書きます。構文としては下記のようになります。
コピーする対象.copy 貼りつける対象
セルを切り取って貼り付け
コピーする対象.cut 貼りつける対象



rangeはセルを指定する命令です。Range(“A1:C3”)のように範囲指定も可能です。

(Range(“A1:A3”).Copy Range(“B1:B3”))。
通常のコピー同様、色や罫線、フォントなどの書式情報もコピーされます。
ワークシートをまたいでコピペしたい場合



この場合で言えば、Sheets(“Sheet24”).Range(“A1”).Copy Sheets(“Sheet23”).Range(“A1”)となります。
(VBAの式内では、_を付けることで折り返して記述することが可能です)

今選択しているセル、シートを対象にしたい場合









ActiveCell.Copy Sheets(“Sheet24”).Range(“A1”)のようになります。前後入れ替えただけです。




貼り付け先をA1:A3のように変更しても、全て「1」がコピーされることになります。
コピーするマクロの中で使う必要はあまりないと思いますが、選択範囲の中でアクティブセルを変更したい場合、Activateメソッド等を使います。
隣にあるセルをコピペ


' vba
ActiveCell.value = ActiveCell.Next' 右隣→アクティブセルにコピー
ActiveCell.value = ActiveCell.Previous' 左隣→アクティブセルにコピー
相対的な位置のセルをコピペ
「選択したセルとその下のセルを特定セルにコピー」とかであれば、Offset(上下左右)プロパティで対応できます。
Resizeプロパティでも、起点となるセルや範囲から見た範囲を取得できます(その他選択系VBA)。
Row・Columnプロパティでも、「選択したセルの行番号を取得し、別の列+取得した行のセルを操作」的なことができます。
「検索したセルの右隣をコピー」とかになると、これはFindメソッドになります。英単語帳の作り方で一回数値操作するのに使っているので、仮にリンク貼っときます。Row・Columnの実用例にもなってます。
条件つきコピー、繰り返しコピー
For nextやFor each in next、Do Whileステートメントを使用することで、広範囲で何度もコピペを繰り返させることができます。また、If文や関数などと組み合わせることで、条件を色々絞ることが可能です。
たとえば下記記事ではFor nextとIf文を使い、空欄がある場合上のセルをコピーする、という処理を何度も繰り返しています。表のサイズにより、100回でも10000回でもワンクリックでコピペが可能です。

別々に行う場合
「選択」「コピー」「ペースト」を別々に行う形で説明します。
セルを選択する方法
最初にどこのデータをコピーするかを指定します。セルの選択にはSelectメソッドを使います。
対象.Select
特定のセルを指定したい(例:A1)ならRange(“A1”)、またはCells(1,1)と指定します。
Cellsは()に行番号、列番号を数字で入れることで場所を指定できます。A2であればCells(2,1)、B1であればCells(1,2)となります。
上記の通りRangeでは範囲指定が可能ですが、Cellsでは不可です。ただしCells.Selectで全体指定は可能です。

(1行目、2列目のセルを選択する)の実行結果。

(A1からB3までのセルを選択する)の実行結果。
別のシートのセルを選択
シートを選択するには、Sheetsオブジェクトを指定します。
Sheets(“シート名”).Select



しかしSelectメソッドだと、Sheets(“sheet24”).Range(“C3”).Selectのようにまとめて書くとエラーになります。理由は知りませんが、そういう仕様です。


セルをコピーする方法
セルが選択できたら、指定したセルをコピーします。
対象.copy
データの切り取り
対象.cut
選択したセルをコピー/切り取りして、貼り付けできる状態にします。通常のコピー同様、新たにコピーするとそれ以前のデータはクリップボードから削除されます。
' vba
' セルを選択してコピー
Cells(1,1).Select
Selection.copy
「対象」は現在選択している部分をコピーする「selection」を使用していますが、直接RangeやCellsで指定することも可能です。
セルをペーストする方法
コピーしたデータの貼り付けを行います。下記の「対象」はActiveSheetを指定し、現在選択されているセルに実行します。
対象.paste


' vba
' セルを選択してコピー
Cells(1,1).Select
Selection.copy
' セルを選択して貼り付け
Range("A2:A5").Select
ActiveSheet.Paste
Copyの対象の省略について


なぜpasteにはselectionが使えないのかについては、okwaveで解答がありましたので、そちらのリンクを貼っておきます。
計算結果だけをコピーしたい場合




このような場合は、Valueプロパティを用います。=を入れるのと、式の右辺が左辺にコピーされる点に注意してください。
貼りつける対象.value = コピーする対象.value





コメント