■既存データへの追加貼り付け■
マクロの記録機能で一番利用したい機能はおそらくコピー&ペーストでしょう。
ここでは、コピーしたデータの貼り付け先の確定方法について考えてみます。
コピーしたデータを毎回同じ同じシートの同じ位置にコピーすればよいのであれば、
対象シートを選択し、セル全体を手動で選択したうえで、”削除”、あるいは”
数式と値のクリア”を行い、あらたに貼り付けを行えばよいでしょう。マクロ記録
でもそのまま使用することができるはずです。
では、貼り付け先シートは同じだとして、現在入力されたデータの下につけたす場合
はどうすればいいのでしょうか?これが今回のテーマです。以下の動作をマクロ記録
してみてください。
(準備)データが入力されているワークシート × 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
|