HOME > 即効テクニック > Excel VBA > その他関連のテクニック > VBA最初の一歩(その2)マクロ記録とコピー先の確定

VBA最初の一歩(その2)マクロ記録とコピー先の確定|Excel VBA

その他関連のテクニック

VBA最初の一歩(その2)マクロ記録とコピー先の確定

( - )

■既存データへの追加貼り付け■

マクロの記録機能で一番利用したい機能はおそらくコピー&ペーストでしょう。
ここでは、コピーしたデータの貼り付け先の確定方法について考えてみます。

コピーしたデータを毎回同じシートの同じ位置にコピーすればよいのであれば、対象シートを選択し、セル全体を手動で選択したうえで、”削除”、あるいは”数式と値のクリア”を行い、あらたに貼り付けを行えばよいでしょう。マクロ記録でもそのまま使用することができるはずです。

では、貼り付け先シートは同じだとして、現在入力されたデータの下につけたす場合はどうすればいいのでしょうか?これが今回のテーマです。

以下の動作をマクロ記録してみてください。

(準備)データが入力されているワークシート × 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