VBA最初の一歩(その2)マクロ記録とコピー先の確定|Excel VBA |
マクロの記録機能で一番利用したい機能はおそらくコピー&ペーストでしょう。
ここでは、コピーしたデータの貼り付け先の確定方法について考えてみます。
コピーしたデータを毎回同じシートの同じ位置にコピーすればよいのであれば、対象シートを選択し、セル全体を手動で選択したうえで、”削除”、あるいは”数式と値のクリア”を行い、あらたに貼り付けを行えばよいでしょう。マクロ記録でもそのまま使用することができるはずです。
では、貼り付け先シートは同じだとして、現在入力されたデータの下につけたす場合はどうすればいいのでしょうか?これが今回のテーマです。
以下の動作をマクロ記録してみてください。
(準備)データが入力されているワークシート × 2
※一行目を項目行とする複数列、複数行からなるデータ
(空白行、空白列は含まない)
(シート1から項目行を除くデータをすべてシート2最終行の下へコピー)
1. シート1で項目行を除くデータをすべて選択。
(a)セルA2を選択
(b)[Ctrl]+[Shift]+[→]キー
(コントロールキーとシフトキーをおしたまま右向き矢印キー)、
つづいて、[Ctrl]+[Shift]+[↓]キーでコピー対象データをすべて選択してコピー。
2.シート2への貼り付け
(a)シート2を選択。セルA1を選択
(b)[Ctrl]+[↓]キーでA列最終行セルを選択。
(c)[↓]キーで隣接する下側のセルを選択。
(d)貼り付け
さて、1、2を記録すると次のようになります。(編集してあります)
Sub Macro1()
Range("A2").Select '1-(a)
Range(Selection, Selection.End(xlToRight)).Select '1-(b)
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Sheet2").Select '2-(a)
Range("A1").Select
Selection.End(xlDown).Select '2-(b)
Range("A233").Select '2-(c)
ActiveSheet.Paste '2-(d)
End Sub
ここでひとつだけ問題があります。2-(c)で下向き矢印を用いたところです。 ひとつ下のセルを選択する際の記録は・・・
Range("A233").Select '2-(c)
となっています。ここでは”Range("A233")”という特定のセルになってしまっています。特定のセルを表している以上、汎用性がなくなり、使いまわしが出来なくなってしまいます。そこで、セル領域の移動をあらわすVBAの命令で置き換えます。
直前の2-(b)と2-(c)をあわせて・・・
Selection.End(xlDown).Offset(1,0).Select
※Offset(縦方向の移動、横方向の移動)
のようにします。2-(b)にOffsetというVBAの命令を割り込ませたような形になっていますが、これは縦方向に1、横方向に0移動したセルを表しています。
編集後のコードは以下のようになります。
Sub MyProc()
Range("A2").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Sheet2").Select
Range("A1").Select
Selection.End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
End Sub