VBA最初の一歩(その3)・・・マクロ記録とSelect命令
■Select命令についての再考■

マクロ記録機能を用いていると、セルに格納されたデータを扱うには必ず
セルを選択するため、例えばセルA1から連続するセル領域をコピーしてシート2
のセルA1を起点として貼り付けをする、という動作を行うと、記録されたマクロ
には・・・

(サンプル)

    Range("A1").Select
    Selection.CurrentRegion.Select
    Selection.Copy
    Sheets("Sheet2").Select
    Range("A1").Select
    ActiveSheet.Paste

のように記述されます。この中にSelect命令が何度も出てきていますが、実際、
必ずしも選択する必要はありません。1、2行目を見ると・・・

    Range("A1").Select
    Selection.CurrentRegion.Select

ここで行いたいのはセルA1を起点としたアクティブセル領域(CurrentRegion)
の取得ですが、記録では・・・

	A1を選択
	選択範囲(Selection)のアクティブセル領域を選択。

となっており、Select命令実行結果としてSelectionがセルA1をあらわしています。
つまり、Selectionの中身はここではセルA1であることから、

    Range("A1").CurrentRegion.Select

としても同じことなのです。さらにこの後のCopy命令で使われているSelectionが表し
ているのは”Range("A1").CurrentRegion”ですから・・・

    Range("A1").CurrentRegion.Copy

としても結果は同じです。

このように、マクロ記録を修正する際に肝心なのは重複した命令をどのように見出す
かにかかっています。

■Copy命令についての再考■

サンプル4、5行目はシートの切り替えを行っているため、1行にまとめることは出来
ませんが、Copy命令を見直すことでシートの切り替えを行わずに済ませることが可能です。

	Selection.Copy Destination:=sheets("Sheet2").Range("A1")

	※Copy Destination:=貼り付け先

とすることで、貼り付け先を指定しておけば、シートの切り替えも、貼り付け先基準セル
の選択も行わずにすみます。(Destinationとは英語で”目的地”の意味です)
Destinationを指定することで、結果として上記サンプルは最終的に・・・

    Range("A1").CurrentRegion.Copy Destination:=Sheets("Sheet2").Range("A1")

の一行まで短縮することが出来ます。

ここではSelect命令に対象を絞りましたが、Activate命令も同様で、本当にアクティブに
する必要があるのか、選択する必要があるのか、をマクロ記録を修正する際には考えてみる
必要があります。




戻る


Excel Word Access VBA! モーグ