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




戻る


Excel Word Access VBA! モーグ