HOME > 即効テクニック > Excel VBA > その他関連のテクニック > VBA最初の一歩(その3)マクロ記録とSelectメソッド

VBA最初の一歩(その3)マクロ記録とSelectメソッド|Excel VBA

その他関連のテクニック

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)のアクティブセル領域を選択。

となっており、1行目の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メソッドも同様で、本当にアクティブにする必要があるのか、選択する必要があるのか、をマクロ記録を修正する際には考えてみる必要があります。